2011-12-15 4 views
3

У меня есть два массива, из которых я могу получить $ result [0] или $ result [1].что я делаю неправильно с этим массивом и foreach?

Я сделал print_r($results[0]) и print_r($result[1]). они оба дают мне два разных массива, которые я хочу.

Однако, я не в состоянии получить какой-либо из моей информации, если я делаю это

foreach($results[0] as $result){ 
    echo $result['data']['id']; 
} 

Я хочу, чтобы иметь возможность различать два массива, поэтому я хочу, чтобы иметь возможность получить информацию от два.

Я также сделал json_decode на $ results.

Если кто-то может помочь мне здесь, это будет здорово! благодаря

EDIT:

Array 
(
    [nonsense] => Array 
     (
      [more] => information 
      [less] => less stuff 
     ) 


    [data] => Array 
     (
      [0] => Array 
       (
        [id] => some id 
       ) 
      [1] => Array 
       (
        [eh] => some eh 
       ) 
     ) 
) 

Array 
(
    [more stuff] => Array 
     (
      [more] => information 
      [less] => less stuff 
     ) 


    [more data] => Array 
     (
      [0] => Array 
       (
        [freshstuff] => some id 
       ) 
     ) 

) 
+2

Я думаю, вы можете отобразить результаты своего массива? – Arfeen

+0

Maby вы можете показать эту структуру двух массивов? – piotrekkr

+0

'print_r ($ result [0])' и 'foreach ($ results [0] ..' result ** s ** или result? Может быть, typo? – Narek

ответ

4

В вашем примере $result['data']['id'] не существует. id внутри внутри другой массив.

foreach не полезен в этой ситуации, поскольку данные aren ’ t uniform. При прохождении через $results[0] вы получаете ключ nonsense на первой итерации и ключ data на второй итерации. Кроме того, ключ nonsense представляет собой массив пар ключ/значение, а ключ data - это массив массивов пар ключ/значение.

$results[0] и $results[1]похоже мундштук, но они содержат разные ключи.

echo $results[0]['data'][0]['id'], "<br>\n"; 
echo $results[0]['data'][1]['eh'], "<br>\n"; 

echo $results[1]['more data'][0]['freshstuff'], "<br>\n"; 

Обновление

Еогеасп() Безразлично ’ т работы с такого рода массива. array_walk_recurisive(), как правило, является хорошим выбором в этой ситуации.

<pre> 
<?php 

$results = array(
    array(
    'nonsense' => array(
     'more' => 'information', 
     'less' => 'less stuff' 
    ), 


    'data' => array(
     array('id' => 'some id'), 
     array('eh' => 'some eh') 
    ) 
), 

    array(
    'more stuff' => array(
     'more' => 'information', 
     'less' => 'less stuff' 
    ), 


    'more data' => array(
     array('freshstuff' => 'some id')) 

) 
); 


function test_print($item, $key) 
{ 
    echo "$key: $item\n"; 
} 

array_walk_recursive($results, 'test_print'); 

?> 
</pre> 

отображает

more: information 
less: less stuff 
id: some id 
eh: some eh 
more: information 
less: less stuff 
freshstuff: some id 

В зависимости от ваших потребностей, вы можете также найти некоторые другие array functions полезной.

+0

Так что я не могу сделать foreach для итерации всех данных? Я не хочу набирать [0] ... [1] .... [2] .... и т. Д. Если я удалю [0] из foreach, я могу получить выходы – hellomello

+0

Пример кода для [array_walk_recursive] (http: //www.php.net/manual/en/function.array-walk-recursive.php) доставит вас во внутренние данные в '$ results'. Он печатает 'more hold information',' less has less stuff', 'id содержит некоторый id' и т. Д. Вы также можете исследовать другие [функции массива] (http://php.net/manual/en/ref.array .php), чтобы узнать, полезны ли они для ваших целей. Я не знаю достаточно о ваших данных или намерении предложить больше, чем это. – Herbert

+0

Я просто пытаюсь использовать цикл foreach. это даже возможно? – hellomello

Смежные вопросы