2015-10-01 7 views
1

Предположим, у меня есть следующие данные.цикл только один раз почему?

Теперь я пытаюсь сгруппировать все значения каждой группы в одном массиве.

Предположим, что $ temp_array contaib все результаты, которые у меня есть. Теперь я пытаюсь объединить все данные, основанные на id-

Так я пытаюсь сделать это ---

array(
values (
id -225 
name1= hello 
name2= 45 
name3= burger 
, 
id -225 
name1= bacon 
name2= cheese)) 

так что я пытался как так ---

$count=count($temp_array); // $temp_array contains all results 
foreach ($temp_array as $key => $var) { 

    for ($j = 0; $j < count($count); ++$j) { 
     $data = array(); 
     $data['id'] = $var[$j]['id']; 
     $data['name'] = $var[$j]['name']; 
     }} 

, но проблема в том, что это только цикл один раз, означает значение [0]. так я получить результат, как так ---

array(
    values (
    id -225 
    name1= hello 
    name2= 0 
    name3= 0 
    , 
    id -225 
    name1= bacon 
    name2= 0 
...)) 

мои результаты ---

Array 
(
    [0] => Array // group number 0 
     (
      [0] => Array 
       ([id] => 225 
       [name] => hello 
      ) 

      [1] => Array 
       (
        [id] => 225 
        name] => ham 
         ) 

      [2] => Array 
       (
       [id] => 225 
       ) 

      [3] => Array 
       (
        [id] => 225 
        name] => burger 
       ) 
    [1] => Array // group number 1 
     (
      [0] => Array 
       (
        [id] => 45 
        name] => bacon 
       ) 
        [1] => Array 
       (
        [id] => 45 
        name] => cheese 
         ) 

может кто-то попытается помочь мне решить эту проблему

+0

Что $ рассчитывать ?? @Christofer: Я думаю, вам нужно использовать $ var –

+0

где вы устанавливаете '$ count'? Является ли это ошибкой или определяется раньше где-то еще? –

+0

слишком много утверждений 'count'! Вам не нужен оператор 'count' в цикле' for ($ j = 0; $ j RamRaider

ответ

4

$ значение счетчика «s является целое число, так что вы apllying дополнительный подсчет функции

() заменить

for ($j = 0; $j < count($count); ++$j) { 

с

for ($j = 0; $j < $count; ++$j) { 

Также вы можете попробовать, как это:

$data = array(); 
foreach($tempArrray as $row) { 
    $data[$row['id']][] = $row; 
} 
+0

извините, может быть у не видел этого -Array '( [0] => Array, ( [0]' ' –

+0

счетчик()' функцию Возвращает количество элементов, поэтому '$ count' является целым числом справа? В цикле вы используете функцию count()' второго дня, чтобы целое число, поэтому я хочу сказать –

+0

, это правда, но это не решает мою проблему, извините –

1

$count является целым числом.

Если вы count($count), он будет считать длину строки $count которая .

count() Функция работает по-разному для разных типов данных.

Если вы передадите ему какое-либо целочисленное значение, оно будет автоматически вводить его в строку и считать длину.

  • Для строк он подсчитывает количество символов в нем.

  • Для массивов он подсчитывает количество элементов в нем.

В вашем случае вы получаете длину строки (которая равна 1), а не количество элементов массива.

Изменить

for ($j = 0; $j < count($count); ++$j) { 

Для

for ($j = 0; $j < $count; ++$j) { 
-1

Как его внутренней части Еогеасп вы должны concanate свой вывод: http://php.net/manual/en/language.operators.string.php

$count=count($temp_array); // $temp_array contains all results 
$data = ''; 
foreach ($temp_array as $key => $var) { 

    for ($j = 0; $j < count($count); ++$j) { 
     $data .= array(); 
     $data['id'] .= $var[$j]['id']; 
     $data['name'] .= $var[$j]['name']; 
     }} 

var_dump($data); 
-1

Ваш массив неправильно , Ваш выход таков:

Array 
(
    [0] => Array // group number 0 
    (
     [0] => Array 
      ([id] => 225 
      [name] => hello 
     ) 

     [1] => Array 
      (
       [id] => 225 
       name] => ham 
        ) 

     [2] => Array 
      (
      [id] => 225 
      ) 

     [3] => Array 
      (
       [id] => 225 
       name] => burger 
      ) // you need to close this array [0] with another), 
[1] => Array // group number 1 
    (
     [0] => Array 
      (
       [id] => 45 
       name] => bacon 
      ) 
       [1] => Array 
      (
       [id] => 45 
       name] => cheese 

Я отредактировал массив и протестировал его с кодом, который вы создали, и он отлично работал. Построить это так:

$array = Array 
(
'0' => Array // group number 0 
(
    '0' => Array 
    ('id' => 225, 
     'name' => 'hello' 
    ), 

    '1' => Array 
    (
     'id' => 225, 
     'name' => 'ham' 
    ), 

    '2' => Array 
    (
     'id' => 225 
    ), 

    '3' => Array 
    (
     'id' => 225, 
     'name' => 'burger' 
    )), 
    '1' => Array // group number 1 
    (
     '0' => Array 
     ('id' => 222, 
      'name' => 'test' 
     ), 

     '1' => Array 
     (
      'id' => 225, 
      'name' => 'ham' 
     ), 

     '2' => Array 
     (
      'id' => 225 
     ))); 

а также то, что они уже упоминали

for ($j = 0; $j < $count; ++$j) { 
    $data = array(); 
    $data['id'] = $var[$j]['id']; 
    $data['name'] = $var[$j]['name']; 

    print_r($data); 
}}