Почему все индексы в массиве 0? - PullRequest
0 голосов
/ 18 сентября 2011

Почему следующий код выводит 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
        }
    }
}

Выход:

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

Я хочу этот вывод:

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

Обновление:

Мой JSON, закодированный в базе данных:

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

Ответы [ 5 ]

1 голос
/ 18 сентября 2011

В этой строке $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
)
0 голосов
/ 18 сентября 2011

Вы создаете все отдельные массивы каждый раз, когда вызываете функцию 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
0 голосов
/ 18 сентября 2011

В третьем foreach вам нужно добавить $ output в новый массив, а затем print_r после цикла.

* 1003 Е.Г. *

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;

0 голосов
/ 18 сентября 2011

Вы можете сделать это, используя стандартный цикл for, такой как этот, вместо цикла foreach:

for ($i = 0; $i < count($newArray); $i++) {
  // ...
}
0 голосов
/ 18 сентября 2011

Попробуйте вместо этого

$output[] = array(implode(",",$newA));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...