что я делаю не так с этим массивом и foreach? - PullRequest
3 голосов
/ 15 декабря 2011

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ:

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
                )
        )

)

1 Ответ

4 голосов
/ 15 декабря 2011

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

foreach бесполезен в этой ситуации, потому что данные не единообразны. Когда вы перебираете $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";

Обновление

foreach () не работает с такими массивами. array_walk_recurisive () обычно является хорошим выбором в этой ситуации.

<code><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');

?>

показывает

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

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

...