Как преобразовать простой массив в ассоциативный массив? - PullRequest
25 голосов
/ 27 мая 2011

Какой самый быстрый способ преобразовать простой массив в ассоциативный массив в PHP, чтобы можно было проверить значения в isset($array[$value])?

Т.е. самый быстрый способ выполнить следующее преобразование:

$array = array(1, 2, 3, 4, 5);
$assoc = array();

foreach ($array as $i => $value) {
        $assoc[$value] = 1;
}

Ответы [ 5 ]

32 голосов
/ 27 мая 2011

Ваш код является точным эквивалентом:

$assoc = array_fill_keys(array(1, 2, 3, 4, 5), 1); // or
$assoc = array_fill_keys(range(1, 5), 1);

array_flip(), хотя он может работать для вашей цели, это не то же самое.

PHP ref: array_fill_keys(), array_flip()

18 голосов
/ 27 мая 2011

array_flip() именно это и делает:

array_flip () возвращает массив в обратном порядке, то есть ключи из trans становятся значениями, а значения из trans становятся ключами.

Обратите внимание, что значения trans должны быть действительными ключами, т. Е. Они должны быть либо integer , либо string . Предупреждение будет выдано, если значение имеет неправильный тип, и рассматриваемая пара ключ / значение не будет перевернута .

Если значение имеет несколько вхождений, последний ключ будет использоваться в качестве его значений, а все остальные будут потеряны.


Но кроме этого, в PHP есть только один тип массива. Даже числовые («простые», как вы это называете) массивы являются ассоциативными.

1 голос
/ 20 ноября 2018

Если кому-то все еще интересно, как это сделать, для этого есть более простое решение с помощью функции array_combine .

$array = array(1, 2, 3, 4, 5);
$assoc = array_combine($array,$array);
0 голосов
/ 18 июля 2019
function simple_to_associative($array) {
    $new_array = [];
    $i = 0;
    $last_elem = end($array);
    $nr_elems = count($array);
    foreach ($array as $index=>$value) {
        if($i % 2 == 0 && $last_elem == $value) {
            $new_array[$value] = '';
        } elseif($i % 2 == 0) {
            $new_array[$value] = $array[$index + 1];
        }
        $i++;
    }
    return $new_array;
}

Будет работать с любым простым массивом неограниченных элементов.

0 голосов
/ 14 мая 2018

Просто используйте эту логику

$var1 = json_encode($arr1, JSON_FORCE_OBJECT);
$var1 = json_decode($var1);

где $ arr1 - массив, который должен быть преобразован в ассоциативный массив. Это может быть достигнуто с помощью json_encode и json_decode одинаковыми

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...