Как преобразовать простой массив в ассоциативный массив?
Каков самый быстрый способ преобразования простого массива в ассоциативный массив в PHP, чтобы значения можно было проверить в isset($array[$value])
?
т.е. самый быстрый способ сделать следующее преобразование:
$array = array(1, 2, 3, 4, 5);
$assoc = array();
foreach ($array as $i => $value) {
$assoc[$value] = 1;
}
Ответы
Ответ 1
array_flip()
точно делает это:
array_flip() возвращает array в флип-порядке, то есть ключи от trans становятся значениями и значениями из транс становятся ключами.
Обратите внимание, что значения trans должны быть действительными ключами, то есть они должны быть integer или string. Предупреждение будет выдаваться, если значение имеет неправильный тип, а пара ключ/значение в вопросе не будет перевернута.
Если значение имеет несколько вхождений, последний ключ будет использоваться в качестве его значений, а все остальные будут потеряны.
Но кроме этого в PHP существует только один тип массива. Даже числовые ( "простые", как вы его называете) массивы ассоциативны.
Ответ 2
Ваш код является точным эквивалентом:
$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()
Ответ 3
Если кому-то все еще интересно, как это сделать, есть более простое решение для этого с помощью функции array_combine.
$array = array(1, 2, 3, 4, 5);
$assoc = array_combine($array,$array);
Ответ 4
Просто используйте эту логику
$var1 = json_encode($arr1, JSON_FORCE_OBJECT);
$var1 = json_decode($var1);
где $ arr1 - массив, который должен быть преобразован в ассоциативный массив. Это может быть достигнуто с помощью json_encode и json_decode одним и тем же
Ответ 5
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;
}
Будет работать на любой простой массив неограниченных элементов.