web-dev-qa-db-ja.com

最新のPHPのlist()は連想配列で何らかの形で機能しますか?

例:

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

上記のコードはもちろん問題ありませんが、以下のコード:

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

与える:_Notice: Undefined offset: 1 in...._

名前付きキーをlist('fruit1' : $fruit1)のようなリストで何らかの形で参照する方法はありますか、このようなものが将来のリリースで計画されているのを見ましたか?

39
rsk82

編集:このアプローチは昔は便利でした(文字通り7年以上前に回答を求められました)が、Kガンの回答新しいPHP 7+構文によるより良いアプローチ。

extract() 関数を試してください。すべてのキーの変数を作成し、関連する値に割り当てます。

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

With/from 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
58
K-Gun

Array_values()の使用についてはどうですか?

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

私の場合は:

list()は数値配列でのみ機能します。したがって、可能であれば、fetch()またはfetchAll()を空白のままにして、数値配列と連想配列の2つのオプションを設定します。それが動作します。

1
Trung Phạm

実装は非常に簡単です。

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サポートが向上
0