【问题标题】:3 dimension Array foreach3维数组foreach
【发布时间】:2014-09-30 05:39:58
【问题描述】:

我在显示多维数组时遇到问题...

$copyscape = array (
                'query' => 'www.example.html',
                'querywords' => 444,
                'count' => 230,             
                'result' => array(
                                        'number' => array(
                                                'index' => 1,   
                                                'url' => 'http://www.archives.gov/exhibits/charters/declaration_transcript.html',
                                                'title' => 'Declaration of Independence - Text Transcript',
                                                'minwordsmatched' => 406,
                                                'viewurl' => 'http://view.copyscape.com/compare/w4med9eso0/1'
                                        )
                )
    );

基本上我想显示所有内容并将其保存在变量中...

echo "<ul>";
        foreach($copyscape as $name => $value)
        {
            echo "<li>" . $name . " : ". $value . "</li>";      

        }       
        echo "</ul>";

我尝试在里面插入另一组 foreach 但它给了我一个 为 foreach() 提供的参数无效

【问题讨论】:

  • 尝试搜索$copyscape['result']['number']。您还可以发布更大的数组吗?

标签: php arrays api multidimensional-array foreach


【解决方案1】:

试试这个代码:

$copyscape = array (
                'query' => 'www.example.html',
                'querywords' => 444,
                'count' => 230,             
                'result' => array(
                                        'number' => array(
                                                'index' => 1,   
                                                'url' => 'http://www.archives.gov/exhibits/charters/declaration_transcript.html',
                                                'title' => 'Declaration of Independence - Text Transcript',
                                                'minwordsmatched' => 406,
                                                'viewurl' => 'http://view.copyscape.com/compare/w4med9eso0/1'
                                        )
                )
    );
function test_print($item, $key)
{
    echo "<li>" . $key . " : ". $item . "</li>";
}
echo "<ul>";
array_walk_recursive($copyscape, 'test_print');
echo "</ul>";

【讨论】:

  • +1 在这里使用array_walk_recursive 的好方法!
  • 效果很好!谢谢!
【解决方案2】:

使用这个

foreach ($copyscape as $key=>$value){

echo "<li>" . $key. " : ". $value. "</li>";      // this for main Array

if (is_array ($value))
{
  foreach ($value as $childArrayKey => $childArrayValue ){
echo "<li>" . $childArrayKey . " : ". $childArrayValue . "</li>"; // this for childe array 
}
}

}

 foreach ($copyscape as $key=>$value){

    echo "<li>" . $key. " : ". $value. "</li>";      // this for main Array


      foreach ($value['result']['number'] as $childArrayKey => $childArrayValue ){
    echo "<li>" . $childArrayKey . " : ". $childArrayValue . "</li>"; // this for childe array 
    }


    }

【讨论】:

    【解决方案3】:

    如果您想在列表中包含列表(嵌套级别)..

    function outputLevel($arr)
    {
      echo '<ul>';
      foreach($arr as $name => $value)
      {
       echo '<li>';
       if (is_array($value))
          outputLevel($value);
       else 
          echo $name . ' : ' . $value;
       echo '</li>'      
      }        
      echo '</ul>';
    }
    
    outputLevel($copyscape);
    

    【讨论】:

      【解决方案4】:

      试试下面的代码:

      <?php
          $copyscape = array (
                          'query' => 'www.example.html',
                          'querywords' => 444,
                          'count' => 230,             
                          'result' => array(
                                                  'number' => array(
                                                          'index' => 1,   
                                                          'url' => 'http://www.archives.gov/exhibits/charters/declaration_transcript.html',
                                                          'title' => 'Declaration of Independence - Text Transcript',
                                                          'minwordsmatched' => 406,
                                                          'viewurl' => 'http://view.copyscape.com/compare/w4med9eso0/1'
                                                  )
                          )
              );
          MultiDimRecuArray($copyscape);
          function MultiDimRecuArray($copyscape) {
              echo "<ul>";
              foreach ($copyscape as $key=>$val) {
                  if(is_array($val)){
                      MultiDimRecuArray($val);
                  }else{
                      echo "<li>" . $key . " : ". $val . "</li>";
                  }
              }
              echo "</ul>";
          }
      

      【讨论】:

        【解决方案5】:

        尝试使用递归函数,如下所示:

        function printArray($array)
        {
            echo "<ul>";
        
            foreach($array as $name=>$value)
            {   
                if(is_array($value))
                {
                    printArray($value);   
                }
                else
                {
                    echo "<li>" . $name . " : ". $value . "</li>";    
                }
            }
        
            echo "</ul>";
        }
        
        $copyscape = array (
                        'query' => 'www.example.html',
                        'querywords' => 444,
                        'count' => 230,             
                        'result' => array(
                                                'number' => array(
                                                        'index' => 1,   
                                                        'url' => 'http://www.archives.gov/exhibits/charters/declaration_transcript.html',
                                                        'title' => 'Declaration of Independence - Text Transcript',
                                                        'minwordsmatched' => 406,
                                                        'viewurl' => 'http://view.copyscape.com/compare/w4med9eso0/1'
                                                )
                        )
            );
        
        printArray($copyscape);
        

        【讨论】:

          【解决方案6】:

          使用这个

          <?php
          $copyscape = array (
                              'query' => 'www.example.html',
                              'querywords' => 444,
                              'count' => 230,             
                              'result' => array(
                                                      'number' => array(
                                                              'index' => 1,   
                                                              'url' => 'http://www.archives.gov/exhibits/charters/declaration_transcript.html',
                                                              'title' => 'Declaration of Independence - Text Transcript',
                                                              'minwordsmatched' => 406,
                                                              'viewurl' => 'http://view.copyscape.com/compare/w4med9eso0/1'
                                                      )
                              )
                  );
          PrintMultiDimArray($copyscape);
          function PrintMultiDimArray($copyscape) {
              echo "<ul>";
              foreach ($copyscape as $key=>$val) {
                  if(is_array($val)){
                      echo "<li>";
                      PrintMultiDimArray($val);
                      echo "</li>";
                  }else{
                      echo "<li>" . $key . " : ". $val . "</li>";
                  }
              }
              echo "</ul>";
          }
          ?>
          

          【讨论】:

            【解决方案7】:

            试试这个..

            echo '<ul>';
            displayList($copyscape);
            echo '</ul>';
            
            function displayList($arr)
            {
                  foreach($arr as $name => $value) {
                      if (is_array($value)) {
                            displayList($value);
                      }  
                      else {
                            echo '<li>';
                            echo $name . ' : ' . $value;  
                            echo '</li>';
                      }  
                  }        
            }
            

            【讨论】:

            • 效果很好!谢谢!
            【解决方案8】:

            使用这个:

            function print_stuff($arr){
                foreach($arr as $key => $val){
                    if(is_array($val)){
                        echo "$key: <ul>";
                        print_stuff($val);
                        echo "</ul>";
                    } else {
                        echo "<li>$key : $val</li>\n";
                    } 
                }
            }
            
            echo "<ul>";
            print_stuff($copyscape);
            echo "</ul>";
            

            代码打印一个 nested list,包括嵌套列表的 key name

            query : www.example.html
            querywords : 444
            count : 230
            result:
                number:
                    index : 1
                    url : http://www.archives.gov/exhibits/charters/declaration_transcript.html
                    title : Declaration of Independence - Text Transcript
                    minwordsmatched : 406
                    viewurl : http://view.copyscape.com/compare/w4med9eso0/1
            

            【讨论】:

              猜你喜欢
              • 2021-03-07
              • 2012-08-14
              • 2013-11-02
              • 2015-03-01
              • 2017-10-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多