【问题标题】:Why is this php array not returning an error?为什么这个 php 数组没有返回错误?
【发布时间】:2015-01-23 21:52:28
【问题描述】:
<?php

$letters = array( 'A', 'B', 'C' );
$numbers = array( 1, 2, 3 );
$matrix = array( 'Letter' => $letters, 'Number' => $numbers );

echo "<p>Start : {$matrix['Letter'][0]}</p>";

foreach($matrix as $array => $list)
{
   echo'<ul>';
   foreach($list as $key => $value)
   { 
      echo "<li>$array [$key] = $value";
   }
   echo '</ul>';
}

?>

我需要帮助理解这段代码,基本上我对第 13 行的工作方式感到困惑。

What I see:

'$value' = non-key values of '$list'
'$list' = non-key values of '$matrix'
'$matrix' = $letters, $numbers

Therefore '$value' = $letters, $numbers

'$array' = key values of '$list'

Therefore '$array' = 'Letter', 'Number'

我知道我可以输入 echo "&lt;p&gt;Letter: {$letters[0]}&lt;/p&gt;"; 来返回字母“A”,但如果我输入 echo "&lt;p&gt;Letter: {$letters}&lt;/p&gt;"; 则会收到错误消息。

我的重点是第 13 行,{ echo "&lt;li&gt;$array [$key] = $value"; }

为什么这不返回错误?

'$array' 中未指定位置,'$key' 从未分配,'$value' 中未指定位置。

我几天前才开始学习 PHP 和 MySQL。 非常感谢任何帮助,因为我正在努力学习并希望继续阅读本书的下一部分,但我需要先弄清楚这一点。

~谢谢!

【问题讨论】:

  • $key$value$array 在 foreach 中定义
  • $array 在外部 foreach 循环中定义
  • 你不能在数组上回显,这就是为什么当你做echo "&lt;p&gt;Letter: {$letters}&lt;/p&gt;";时会产生错误的原因@

标签: php arrays loops matrix foreach


【解决方案1】:
foreach($matrix as $array => $list)
{
    //$array is String "Letter" and $list is array $letters for first iteration
    //$array is String "Number" and $list is array $numbers for second iteration

    echo'<ul>';
    foreach($list as $key => $value)
    {
       //when $list=$letters 
       //1st iteration:$key =0 and value 'A'; 2nd iteration :$key=1 and $value= 'B'.....

      //finally
      //$array means "Letter"
      //$key mean 0
      //$value  mean "A"

      //and loop goes on


        echo "<li>$array [$key] = $value";
         //result
         //<li>Letter[0] = A;
         //<li>Letter[1] = B;  
         //.............
    }
    echo '</ul>';
}

希望你能理解。
记住你的 li 标签没有关闭。使用这个

echo "<li>$array [$key] = $value </li>";

【讨论】:

    【解决方案2】:

    所有这三个变量都是由 foreach 构造为循环体临时定义的变量,它们都是数字或字符串,而不是数组。

    http://php.net/manual/en/control-structures.foreach.php

    foreach($matrix as $array => $list)
    

    上面的行定义了循环体的变量$array$list$array 是一个字符串,依次设置到$matrix 的每个键上; $list 是每个键对应的值。

    foreach($list as $key => $value)
    

    同样,这在循环体内定义了变量$key$value$key 被设置为$list 的每个键,一次一个,$value 被设置为每个匹配的值。

    【讨论】:

      【解决方案3】:

      所有这三个变量都是标量值(字符串或数字),因此直接打印它们没有问题。

      foreach($matrix as $array => $list)
      

      看看foreach 是如何工作的。在这里,命名不佳的$array 将具有以下两个值之一:"Letter""Number"。显然它们都可以毫无问题地打印出来。

      foreach($list as $key => $value)
      

      这里的$list 将是array( 'A', 'B', 'C' )( 1, 2, 3 )。在任何一种情况下,$key 将具有以下值之一:012$value 将是字符串或整数。同样,所有这些都可以毫无问题地打印出来。

      【讨论】:

        【解决方案4】:

        首先

        echo "<p>Letter: {$letters}</p>";
        

        返回错误,因为您试图回显整个数组。用 echo 是做不到的。

        这段代码

        foreach($list as $key => $value)
        { echo "<li>$array [$key] = $value"; }
        echo '</ul>';
        }
        

        是有效的,因为每个值都有自己的键。如果您没有为某个值定义键,则键将自动添加。 你说你知道这行得通:

        echo "<p>Letter: {$letters[0]}</p>";
        

        “0”是键,它是在数组初始化期间自动添加的。键不需要是字符串才能成为某个值的键。

        【讨论】:

          【解决方案5】:

          我错过了这样一个事实,即如果没有为 '$letters''$numbers' 设置键值,则默认情况下它们的每个值的键是它们的顺序。

          所以通过每个循环我意识到$list[0] = $letters$list[1] = $numbers

          Therefore:
          '$value' = non key value of '$list[0]' = non-key value of '$letters'
          '$key' = key value of '$list[0]' = key value of '$letters'
          

          所以在某种意义上,'$list' 是分别指向'$letters''$numbers' 的指针。

          如果将来有人感到困惑,我已经制定了以下每个迭代:

          /*
          
          Loop One:
          Sub1:
          $list[0] = $letters = 'A', 'B', 'C'
          $key = '0'
          $value = 'A'
          
          Sub2:
          $list[0] = $letters = 'A', 'B', 'C'
          $key = '1'
          $value = 'B'
          
          Sub3:
          $list[0] = $letters = 'A', 'B', 'C'
          $key = '2'
          $value = 'C'
          
          Loop Two:
          Sub1:
          $list[1] = $numbers = '1', '2', '3'
          $key = '0'
          $value = '1'
          
          Sub2:
          $list[1] = $numbers = '1', '2', '3'
          $key = '1'
          $value = '2'
          
          Sub3:
          $list[1] = $numbers = '1', '2', '3'
          $key = '2'
          $value = '3'
          
          */
          

          【讨论】:

            猜你喜欢
            • 2013-03-25
            • 2014-05-09
            • 2020-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多