У меня есть $users
Array $users
:
Array
(
[0] => Array
(
[id] => 3
[name] => name3
)
[1] => Array
(
[id] => 4
[name] => name4
)
[2] => Array
(
[id] => 5
[name] => name5
)
[3] => Array
(
[id] => 6
[name] => name6
)
)
который должен выглядеть так:
Array
(
[3] => Array
(
[id] => 3
[name] => name3
)
[4] => Array
(
[id] => 4
[name] => name4
)
[5] => Array
(
[id] => 5
[name] => name5
)
[6] => Array
(
[id] => 6
[name] => name6
)
)
"Основной" ключ моего массива должен быть идентификатором пользователя, чтобы упростить его доступ. поэтому я мог бы использовать:
$users[$userid]['name']
где $userid
будет int (6), и результатом будет строка (name6)
Я боюсь, что это довольно просто, но что было бы самым простым решением для моей проблемы?
Если вы используете PHP <5.5, это почти так же просто:
$newUsers = array();
foreach($users as $data) {
$newUsers[$data['id']] = $data;
}
Я создаю этот массив с запросом mysqli
Почему бы не сгенерировать ваш массив с помощью клавиш, которые вы хотите в первую очередь?
Вместо того, чтобы менять их после факта?
Поэтому вместо чего-то вроде этого:
while ($row = $result->fetch_assoc())
$result[] = $row;
что-то вроде этого:
while ($row = $result->fetch_assoc())
$result[$row['id']] = $row;
$key
. Когда это установлено, используется $result[$row[$key]]
как я показываю во втором фрагменте; когда это не так, используется $result[]
. Это работает очень хорошо и держит ваш код универсальным. Это гораздо эффективнее и элегантнее, чем позже переводить результаты в другую форму в некоторых X% случаев.
Если вы используете PHP> = 5.5, это может быть так просто, как
$newArray = array_combine(
array_column($oldArray, 'id'),
$oldArray
);
Для более ранних версий PHP вы можете использовать
$newArray = array_combine(
array_map(
function($value) {
return $value['id'];
},
$oldArray
),
$oldArray
);