【问题标题】:Output multidimensional array with keys and values输出带有键和值的多维数组
【发布时间】:2016-01-18 15:27:00
【问题描述】:

我有一个数组 ($myarray),我尝试用它的键和值在 foreach 循环中输出每个元素,但我不知道如何。以下数组是解析的 .ini 文件的结果。这是print_r($myarray);的输出

Array
(
    [Array1] => Array ( [A] => Test [B] => 123 )
    [Array2] => Array ( [C] => Test [D] => 123 )
    [Array3] => Array ( [E] => Test [F] => 123 )
)

我试过这样:

foreach ($myarray as $x)
{
    echo "<p>".$x." ";

    foreach($x as $key => $value)
    {
        echo $key." = ".$value . ";";

    }
    echo "</p>";
}

我希望是这样的:

Array1:  A = Test; B = 123
Array2:  C = Test; D = 123
Array3:  E = Test; F = 123

但不幸的是,我没有得到任何输出。我显然误解了一些东西。

【问题讨论】:

  • 没有错误信息。页面的其余部分有效。也许错误报告已停用?我必须检查一下。
  • 好的,你能在这个循环中回显其他任何内容吗?
  • 感谢您的提示。我发现了错误。错误报告实际上在 php.ini 文件中被禁用,否则我会看到错误。这是因为我在函数中有 foreach 循环,并且该函数无法识别我的数组(它说 $myarray 未定义)。我将数组作为参数移交,现在它可以工作了。谢谢先生。

标签: php arrays loops foreach


【解决方案1】:

您的代码似乎几乎可以正常工作,唯一的区别是您没有为主数组定义键/值对,因此您期望从 array() 中取回一个键,该键将返回 $x 作为 array( ) 或输出时什么都没有

    $myarray = array(
            "Array1" =>array("A" => "Test", "B" => 123),
            "Array2" =>array("C" => "Test", "D" => 123),
            "Array3" =>array("E" => "Test", "F" => 123)
            );
foreach ($myarray as $masterkey => $mastervalue)
{
    echo "<p>".$masterkey." ";

    foreach($mastervalue as $key => $value)
    {
        echo $key." = ".$value . ";";

    }
    echo "</p>";
}

这是我使用的示例代码(基于您的)

输出

Array1 A = Test;B = 123;

Array2 C = Test;D = 123;

Array3 E = Test;F = 123;

【讨论】:

    【解决方案2】:

    您的内部foreach 是正确的,因为您通过$key =&gt; $value 语法将键和值分配给变量。你需要在你的外循环中做同样的事情:

    foreach ($myarray as $x => $y)
    {
        echo "<p>".$x." ";
    
        foreach($y as $key => $value)
        {
            echo $key." = ".$value . ";";
    
        }
        echo "</p>";
    }
    

    【讨论】:

      【解决方案3】:

      或者你可以使用:

      echo '<pre>';
      echo print_r($myarray, true); // this will return the output, not echo it
      echo '</pre>';
      

      或者

      echo '<pre>';
      print_r($myarray); // this echo it, but after <pre> and before </pre>
      echo '</pre>';
      

      或者写一个递归函数:

      function output_myarray($myarray) {
          $output = array();
      
          foreach($myarray as $key => $value) {
              if(is_array($value)) {
                  $output[] = output_myarray($value);
              } else {
                  $output[] = '<p>' . $key . ' = ' . $value . ';';
              }
          }
      
          return $output;
      }
      

      然后回显它:

      echo '<pre>';
      echo print_r(output_myarray($myarray), true);
      echo '</pre>';
      

      甚至更简单:

      echo implode('', output_myarray($myarray), true);
      

      或者换行:

      echo implode("\n", output_myarray($myarray), true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-29
        • 2015-10-30
        • 1970-01-01
        相关资源
        最近更新 更多