为什么数组中的所有索引都是0?

时间:2011-09-18 19:22:01

标签: php arrays codeigniter foreach

为什么以下代码输出0索引?

我希望索引为:0 1 2 3 4 ...。我该如何解决?

代码:

foreach ($query->result() as $row){
    $data = json_decode($row->residence,true);
    foreach($data as $datum){
        $newArray = array_chunk($datum['units'], 3);
        foreach($newArray as $newA){
            $output = array(implode(",",$newA));
            echo print_r($output).'<br>'; //this is output
        }
    }
}

输出:

  

数组([0] =&gt;萨拉姆,11,11)1
数组([0] =&gt; khobe,22,22)1
  数组([0] =&gt;萨拉姆,55,55)1
数组([0] =&gt; khobe,66,66)1

我想要这个输出:

  

数组([0] =&gt;萨拉姆,11,11)1
数组([1] =&gt; khobe,22,22)1
  数组([2] =&gt;萨拉姆,55,55)1阵列([3] =&gt; khobe,66,66)1

更新

我的JSON在数据库中编码:

[{
    "units": ["salam", "11", "11", "khobe", "22", "22"],
}, {
    "units": ["salam", "55", "55", "khobe", "66", "66"],
}]

5 个答案:

答案 0 :(得分:1)

在这一行$output = array(implode(",",$newA));上,您为每组结果创建一个新数组,因此偏移始终从0开始。

试试这个:

$output = array();

foreach ($query->result() as $row){
    $data = json_decode($row->residence,true);
    foreach($data as $unit) {
        $output[] = implode(',', $unit['units']);
    }
}

的print_r($输出);

我从单行获得以下输出:

Array
(
    [0] => salam,11,11,khobe,22,22
    [1] => salam,55,55,khobe,66,66
)

答案 1 :(得分:0)

试试这个

$output[] = array(implode(",",$newA));

答案 2 :(得分:0)

在第三个foreach中,你需要将$ output添加到一个新数组,然后在循环之后添加print_r。

E.g。

foreach ($query->result() as $row){
        $data = json_decode($row->residence,true);
        foreach($data as $datum){
        $newArray = array_chunk($datum['units'], 3);
        $count = 0;
        foreach($newArray as $newA){
            $output = array($count =>implode(",",$newA));
            $count++;
            print_r($output).'<br>'; //this is output
        }

        }
    }

或类似的。 您可能需要移动$ count = 0;

答案 3 :(得分:0)

你可以使用像这样的循环标准而不是foreach循环来实现:

for ($i = 0; $i < count($newArray); $i++) {
  // ...
}

答案 4 :(得分:0)

每次调用array函数时,都会创建所有单独的数组。要将项目添加到同一数组,请使用$output[] = $valueToAdd

$output = array();
foreach ($query->result() as $row){
    $data = json_decode($row->residence,true);
    foreach($data as $datum){
        $newArray = array_chunk($datum['units'], 3);
        foreach($newArray as $newA){
            $output[] = implode(",",$newA);
        }
    }
}
print_r($output).'<br>'; //this is output