【问题标题】:How to fetch multi-dimensional mix array in php?如何在php中获取多维混合数组?
【发布时间】:2016-06-01 08:19:00
【问题描述】:

我将此数组存储在一个变量中:-

Array ( 
  [0] => Array ( 
          [date] => 06/01/2016 - 06/30/2016 
          [0] => Array ( [0] => 1 [1] => 34 [2] => 2 [3] => 55 ) 
          [1] => Array ( [0] => 2 [1] => 55 [2] => 55 [3] => 100 ) 
          [2] => Array ( [0] => 3 [1] => 60 [2] => 100 [3] => 500 ) 
  ) 
) 

这是我的打印代码:

foreach($tables as $table)
{
    foreach($table as $tier)
    {
        echo $tier[0]."<br>";
        echo $tier[1]."<br>";
        echo $tier[2]."<br>";
        echo $tier[3]."<br>";
    }
}

这是它正在打印的内容:

0
6
/
0
1
34
2
55
2
55
55
100
3
60
100
500

这是我所期待的:

1
34
2
55
2
55
55
100
3
60
100
500

如何使用foreach() 获得所需的结果?

【问题讨论】:

  • 您只需要在循环时排除date 键,不是吗?
  • 如果我的回答让一切顺利,请告诉我。
  • 请不要那样做。让人们接受答案固然很好,但不要试图强迫人们接受你自己的答案……
  • 先生,我被否决了,我不知道为什么。
  • @RivnatNasah 坦率地说,我也不知道(尽管我个人会以不同的方式布局并尽可能接近原版)。

标签: php arrays multidimensional-array associative-array


【解决方案1】:

问题在于date 字段被解释为一个层。像这样跳过非数字层:

foreach ($tables as $table)
{
    foreach ($table as $index => $tier)
    {
       if (!is_numeric($index))
           continue;

        echo $tier[0]."<br>";
        echo $tier[1]."<br>";
        echo $tier[2]."<br>";
        echo $tier[3]."<br>";
    }
}

这是一个工作示例:

php > $tables = array(0 => array('date' => '06/01/2016 - 06/30/2016', 0 => array(1, 34, 2, 55), 1 => array(2, 55, 55, 100), 2 => array(3, 60, 100, 500)));

php > foreach ($tables as $table)
php > {
php {     foreach ($table as $index => $tier)
php {     {
php {        if (!is_numeric($index))
php {            continue;
php {
php {         echo $tier[0]."<br>";
php {         echo $tier[1]."<br>";
php {         echo $tier[2]."<br>";
php {         echo $tier[3]."<br>";
php {     }
php { }
1<br>34<br>2<br>55<br>2<br>55<br>55<br>100<br>3<br>60<br>100<br>500<br>
php >

【讨论】:

    【解决方案2】:

    试试这个:排除@Jon Stirling 建议的日期。

    foreach($tables as $table){
        foreach($table as $k => $tier){
            if($k !== 'date')
                echo $tier[0]."<br/>".$tier[1]."<br/>".$tier[2]."<br/>".$tier[3]."<br/>";
        }
    }
    

    新版本来了,之前的版本在if条件下添加!==后效果也很好。

    $tables = array(
                array ( 
                  'date' => "06/01/2016 - 06/30/2016",
                  array ( 1, 34, 2, 55 ),
                  array ( 2, 55, 55, 100 ), 
                  array ( 3, 60, 100, 500 )
                )
            );
    foreach($tables as $table){
        foreach($table as $k => $tier){
            if(!is_array($tier))
                continue;
            foreach($tier as $val)
                echo $val."\n";
        }
    }
    

    更新了问题。

    【讨论】:

    • 您的代码不工作,它显示 2 55 55 100 3 60 100 500
    • @Sumit Bhatia,使用if ($k !== 'date')
    【解决方案3】:

    更新@RivnatNasah 答案

    foreach ($tables as $table) {
        foreach ($table as $key => $values){
            if ($key !== 'date') {
                foreach ($values as $value) {
                    echo $value . PHP_EOL;
                }
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      我假设你的数组只有 0 索引,所以直接在这里调用该数组并传递数组键 date

      比较“日期”时使用 !==

      不要使用 != ,因为 "date" 将被转换为 int 0 所以会在 "date" 和 0 中相等

      foreach ($table[0] as $k=>$tier) {
          if($k !== 'date'){
              echo $tier[0]."<br>";
              echo $tier[1]."<br>";
              echo $tier[2]."<br>";
              echo $tier[3]."<br>";
           }
      }
      

      【讨论】:

        【解决方案5】:
        foreach($tables as $table)
        {
            foreach($table as $key => $tier)
            {
                if ($key !== 'date')
                {
                    echo $tier[0]."<br>";
                    echo $tier[1]."<br>";
                    echo $tier[2]."<br>";
                    echo $tier[3]."<br>";
               }
            }
        }
        

        你的代码真的很接近。

        【讨论】:

        • 我投了反对票,因为对于 OPs 问题,这是错误的。
        • @Webeng 阅读问题。阅读其他答案。
        • @Paul 不。 $table 是一个数组。
        • @Webeng 您的检查应该在第二个 foreach 循环内。
        • @Webeng,我同意@Jon Stirling:$tables$key 是 0,$table 是数组。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 2020-10-08
        • 2017-01-06
        • 1970-01-01
        • 2015-09-30
        • 2012-04-26
        • 1970-01-01
        相关资源
        最近更新 更多