【问题标题】:PHP foreach only returns first [0] of nested arrayPHP foreach 只返回嵌套数组的第一个 [0]
【发布时间】:2020-01-08 20:37:29
【问题描述】:

我有一个像下面这样的对象,数组相互嵌套。 我使用 foreach 循环遍历数组的第一级和第二级。

array (
   'totalHits' => 500,
   'total'     => 845,
   'hits' =>
   array (
       0 => array (
              'url' => 'www.someurl.com',
              'id'  => '11',
       ),
       1 => array (
              'url' => 'www.differenturl.com',
              'id'  => '22',
       ),
 );

我试图从嵌套在“hits”中的所有数组中获取键和值,但我只得到第一个,hits[0]。我错过了什么?

<?php 
	if($_SERVER['REQUEST_METHOD']=='POST'){
		
		$keywords		= $_POST['pixa_keyword'];    		
		$api_key 		= "my_hidden_api_key";
		$url 			= "https://pixabay.com/api/?key=".$api_key."&safesearch=true&q=".$keywords;
		$json			= file_get_contents($url);
		
		
	}
	
	
?>

<body>
	

<form action="#" method="post">
	<input name="pixa_keyword" id="cms_pixaSearchKeywords2" type="text" value="">		
	<input name="submit_pixa_search" id="cms_pixaSearchBtn2" type="submit" value="search">
</form>


<div id="cms_displayPixaResults"></div>
	
<?php 
	
	$pixa_feedback=[];
	
	
	if($_SERVER['REQUEST_METHOD']=="POST"){
		$pixa_feedback = json_decode($json);
	}
	

	foreach($pixa_feedback as $inner){
		// check type
		if(is_array($inner)){
			// iterate through nested array
			$i = 0;
			foreach ($inner[$i] as $key => $value){      
				echo $key . ": " . $value . " <br>";
				$i++;
			}
		}
	}
	
	
?>

【问题讨论】:

    标签: php json object multidimensional-array


    【解决方案1】:

    您的计数器变量没有做任何事情,因为您的 foreach 只会迭代 $inner[0] 然后停止。您需要添加第三级迭代:

    foreach($pixa_feedback as $inner){
        // check type
        if(is_array($inner)){
            // iterate through nested array
            foreach ($inner as $values){
                foreach ($values as $key => $value) {
                    echo $key . ": " . $value . " <br>";
                }
            }
        }
    }
    

    输出:

    url: www.someurl.com <br>id: 11 <br>
    url: www.differenturl.com <br>id: 22 <br>
    

    Demo on 3v4l.org

    【讨论】:

    • 非常感谢 - 这行得通!这是最具体的答案,因此我将其标记为正确答案!
    • @Melvin 不用担心。我很高兴能帮上忙。
    【解决方案2】:

    您没有正确循环您的数组 试试这个:

    $temp = array (
       'totalHits' => 500,
       'total'     => 845,
       'hits' =>
       array (
           0 => array (
                  'url' => 'www.someurl.com',
                  'id'  => '11',
           ),
           1 => array (
                  'url' => 'www.differenturl.com',
                  'id'  => '22',
           ),
     ));
    
    foreach($temp["hits"] as $inner_arr){
         echo $inner_arr["url"];
         echo $inner_arr["id"];
    }
    

    【讨论】:

      【解决方案3】:

      foreach 中,您不需要计数器变量。循环体将为第一个“参数”中的每个项目运行。因此,内循环(在外循环的第 3 次迭代期间)迭代 array ('url' =&gt; 'www.someurl.com', 'id' =&gt; '11') 并在之后完成。

      【讨论】:

        猜你喜欢
        • 2017-09-27
        • 2021-08-22
        • 2016-06-03
        • 2013-05-29
        • 1970-01-01
        • 2019-03-22
        • 2012-04-10
        • 1970-01-01
        相关资源
        最近更新 更多