List() と each() の問題
この投稿は u014402634 によって最終編集されました: 2015-04-02 21:06:29
<br />$fruit = array('a' =>'apple','b'=>'banana','c'=>'cranberry' );<br />reset($fruit);<br />while (list($key,$val)=each($fruit))<br />{<br /> echo "$key=>$val<br>";<br />}<br />//------------------------------------------------------------------------<br /><br /><br />each()不是由4个元素构成么<br />比如第一个是 Array ( [1] => apple [value] => apple [0] => a [key] => a )<br />看手册说list()是从最右边参数开始赋值的 <br />each()4个元素究竟怎么赋值给list两个元素 按理说不是把前两个apple赋值给$key和$val了吗? <br />为啥最后echo能正常输出 对应的 键值对 呢?<br /><br />
ログイン後にコピー
--- - --解決案-------マニュアル読まないんですか?
注: list() は数値インデックス付きの配列でのみ使用でき、数値インデックスが 0 から始まることを前提としています。 $fruit = array('a' =>'apple');<br />print_r(each($fruit));<br />
ログイン後にコピー
Array<br />(<br /> [1] => apple<br /> [value] => apple<br /> [0] => a<br /> [key] => a<br />)<br />
ログイン後にコピー
reset($fruit);<br />list($key, $value) = each($fruit);<br />echo "$key => $value";<br />
ログイン後にコピー
数値インデックス部分のみが割り当てられます
これにより、
$ar = array('a', 'b', 'c' => 'c');<br />list($a, $b, $c) = $ar; //会有 Undefined offset: 2 警告<br />echo "$a $b $c\n";<br />
ログイン後にコピー
が添字増分で割り当てられることが明確になります
$ar = array(1 => 'a', 2 => 'b', 0 => 'c');<br />list($a, $b, $c) = $ar;<br />echo "$a $b $c\n";<br />
ログイン後にコピー
は右から左に割り当てられます
$ar = array('a', 'b', 'c');<br />list($aa[$b][$c], $b, $c) = $ar;<br />print_r($aa);
ログイン後にコピー
Array<br />(<br /> [b] => Array<br /> (<br /> [c] => a<br /> )<br /><br />)<br />
ログイン後にコピー