【问题标题】:The value becomes blank when loop the array循环数组时值变为空白
【发布时间】:2017-05-09 10:00:09
【问题描述】:

我从 API 和这样的结构中获取数据

[
    {keyword: ["123","456","789"] , name :"hello" },
    {keyword: ["abc","def","ghi"] , name :"bye" },
    {keyword: ["987","654","321"] , name :"hello" }
]

我解码它并使用for循环来处理数据

for($i = 0, $l = count($result); $i < $l; ++$i) {
  echo join(',' , $result[0]->keyword);
}

我得到了

 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

我尝试在循环中转储数组,结果是

array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(3) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" } array(2) { [0]=> string(0) "" [1]=> string(0) "" }

但我可以在循环之外使用数据

echo join(',' , $result[0]->keyword);
//123,456,789
var_dump($result[0]->keyword);
//array(3) { [0]=> string(6) "XXXXXXX" [1]=> string(9) "XXXXXXXX" [2]=> string(12) "XXXXXXXXXX" } 

数据中的其他数据都可以使用,没有编码问题,为什么只有这个数组的内容是空白的?

【问题讨论】:

  • 向我们展示var_dump($result); 为您提供了什么。 (在前面输出一个&lt;pre&gt;,或者从源代码视图中复制。)
  • 谁对我投了反对票?我认为这是预期的输出eval.in/790378
  • 你的预期输出是什么?
  • @Steve 这是l 而不是1,但我同意最好将其命名为len
  • @Ôrel 是的,完全错过了。

标签: php arrays for-loop


【解决方案1】:

您可以在此处使用foreach 循环来获得所需的结果。试试这个:

foreach ( $result as $array ) {
    echo implode(",", $array->keyword);
}

注意:大多数人会使用implodejoin 只是 implode 的别名。在您的代码中使用任何一个都可以。

【讨论】:

  • 我通常使用$arr,只是将其完整输入,因为用户似乎很新,不确定他们是否会理解$arr
【解决方案2】:

检查此代码,可能会解决您的问题

<?php
  $str = '[{"keyword": ["123","456","789"] , "name" :"hello" },
    {"keyword": ["abc","def","ghi"] , "name" :"bye" },
    {"keyword": ["987","654","321"] , "name" :"hello" }]';
  $obj = json_decode($str);
  foreach($obj as $elem){
      echo implode(",",$elem->keyword)."\n";
  }
?>

现场演示:https://eval.in/790394

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2016-07-06
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多