Подтвердить что ты не робот

Как преобразовать простой массив в ассоциативный массив?

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

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

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

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

Ответ 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;
}

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