PHP的list()可以处理关联数组吗?

t5fffqht  于 2022-11-28  发布在  PHP
关注(0)|答案(7)|浏览(198)

示例:

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

上面的代码当然可以正常工作,但是下面的代码:

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

给出:Notice: Undefined offset: 1 in....
有没有什么方法可以引用命名键,比如list('fruit1' : $fruit1),你在未来的版本中看到过类似的东西吗?

wqsoz72f

wqsoz72f1#

使用/来自PHP 7.1

  • 对于键控阵列;*
$array = ['fruit1' => 'apple', 'fruit2' => 'orange'];

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

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

echo $fruit1; // apple
  • 对于无键数组;*
$array = ['apple', 'orange'];

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

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

echo $fruit1; // apple

注意:如果可能的话,使用[]风格,也许list在未来会成为一种新的类型,谁知道呢...

sqyvllje

sqyvllje2#

**编辑:**这种方法在过去很有用(九年前就有人提出并回答了这个问题),但请参阅下面Kerem的answer,了解使用更新的PHP 7+语法的更好方法。

试试extract()函数,它会创建所有键的变量,并赋给它们的相关值:

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

8mmmxcuj3#

那么使用array_values()呢?

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

chy5wohz4#

实现起来非常简单。

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支持更好
zpf6vheq

zpf6vheq5#

如果你在我的情况下:
list()只对数值数组有效。所以如果可以的话,在fetch()或fetchAll()中留空-〉让它有两个选项:数值数组和关联数组。它将工作。

mwecs4sa

mwecs4sa6#

可以认为这是一个很好解决方案:

<?php

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

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

?>
yrwegjxp

yrwegjxp7#

<?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

?>

相关问题