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

Может ли список() в последней предстоящей работе PHP с ассоциативными массивами каким-то образом?

Пример:

list($fruit1, $fruit2) = array('apples', 'oranges');

код выше, конечно, работает нормально, но код ниже:

list($fruit1, $fruit2) = array('fruit1' => 'apples', 'fruit2' => 'oranges');

дает: Notice: Undefined offset: 1 in....

Можно ли каким-либо образом ссылаться на именованные ключи с таким списком, как list('fruit1' : $fruit1), видели ли вы что-то подобное в будущей версии?

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: Этот подход был полезен в те времена (его буквально спрашивали об ответе более семи лет назад), но см. ответ K-Gun ниже для лучшего подхода с более новым синтаксисом PHP 7+.

Попробуйте функцию extract(). Он создаст переменные всех ваших ключей, присвоенных их связанным значениям:

extract(array('fruit1' => 'apples', 'fruit2' => 'oranges'));
var_dump($fruit1);
var_dump($fruit2);

Ответ 2

С/из PHP 7.1;

$array = ['fruit1' => 'apple', 'fruit2' => 'orange'];

// [] style
['fruit1' => $fruit1, 'fruit2' => $fruit2] = $array;

// list() style
list('fruit1' => $fruit1, 'fruit2' => $fruit2) = $array;

print $fruit1; // apple

Ответ 3

Как насчет использования array_values ​​()?

<?php
   list($fruit1, $fruit2) = array_values( array('fruit1'=>'apples','fruit2'=>'oranges') );
?>

Ответ 4

Это довольно просто реализовать.

function orderedValuesArray(array &$associativeArray, array $keys, $missingKeyDefault = null)
{
    $result = [];
    foreach ($keys as &$key) {
        if (!array_key_exists($key, $associativeArray)) {
            $result[] = $missingKeyDefault;
        } else {
            $result[] = $associativeArray[$key];
        }
    }
    return $result;
}
$arr = [
    'a' => 1,
    'b' => 2,
    'c' => 3
];
list($a, $b, $c) = orderedValuesArray($arr, ['a','AAA', 'c', 'b']);
echo $a, ', ', $b, ', ', $c, PHP_EOL;

вывод: 1, , 3

  • меньше ввода на стороне использования
  • не зависит от порядка элементов (в отличие от array_values)
  • прямой контроль над именами переменных (в отличие от extract) - меньший риск столкновения имен, лучшая поддержка IDE

Ответ 5

Если вы в моем случае:

list() работает только с числовым массивом. Поэтому, если вы можете, оставив пустым в fetch() или fetchAll() → пусть у него есть 2 варианта: численный массив и ассоциативный массив. Он будет работать.

Ответ 6

считают это элегантным решением:

<?php

    $fruits = array('fruit1'=> 'apples','fruit2'=>'oranges');  

    foreach ($fruits as $key => $value)  
    {
        $$key = $value;  
    }
    echo $fruit1; //=apples  

?>

Ответ 7

<?php

function array_list($array)
{
    foreach($array as $key => $value)
    $GLOBALS[$key] = $value;
}

$array = array('fruit2'=>'apples','fruit1'=>'oranges');

array_list($array);

echo $fruit1; // oranges


?>