Изменить первичные ключи массива

0

У меня есть $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)

Я боюсь, что это довольно просто, но что было бы самым простым решением для моей проблемы?

Теги:
arrays

3 ответа

2
Лучший ответ

Если вы используете PHP <5.5, это почти так же просто:

$newUsers = array();
foreach($users as $data) {
    $newUsers[$data['id']] = $data;
}
  • 0
    Честно говоря, я думаю, что это намного понятнее, чем «решение PHP 5.5».
  • 0
    Я согласен с гонками на орбиту, спасибо!
1

Я создаю этот массив с запросом mysqli

Почему бы не сгенерировать ваш массив с помощью клавиш, которые вы хотите в первую очередь?
Вместо того, чтобы менять их после факта?

Поэтому вместо чего-то вроде этого:

while ($row = $result->fetch_assoc())
   $result[] = $row;

что-то вроде этого:

while ($row = $result->fetch_assoc())
   $result[$row['id']] = $row;
  • 0
    у меня есть мои основные mysqli запросы в файле дополнительного класса. первый фрагмент кода (который, конечно, мой) имеет гораздо более широкую область применения. Я согласен на обновление, спасибо!
  • 0
    @Stefan: В моих кодовых базах моя функция «сделай запрос, пожалуйста» принимает необязательный аргумент $key . Когда это установлено, используется $result[$row[$key]] как я показываю во втором фрагменте; когда это не так, используется $result[] . Это работает очень хорошо и держит ваш код универсальным. Это гораздо эффективнее и элегантнее, чем позже переводить результаты в другую форму в некоторых X% случаев.
Показать ещё 1 комментарий
1

Если вы используете PHP> = 5.5, это может быть так просто, как

$newArray = array_combine(
    array_column($oldArray, 'id'),
    $oldArray
);

Для более ранних версий PHP вы можете использовать

$newArray = array_combine(
    array_map(
        function($value) {
            return $value['id'];
        },
        $oldArray
    ),
    $oldArray
);
  • 1
    Осторожно, пропущенная кома перед $ oldArray и закрытие возможны только с PHP 5.3, если я помню.
  • 0
    PHP> = 5.5 - решение работает как прелесть
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню