перебирая изменяемый массив JSON - PullRequest
1 голос
/ 27 февраля 2011

Я работаю над веб-приложением, которое берет свои данные с веб-страницы, используя API языка запросов Yahoo для возврата массива JSON.Иногда я сталкиваюсь с блоком, когда на странице только одна «раса», массив настроен по-другому, и я не могу перебрать его в некоторых обстоятельствах.Позвольте мне объяснить в примере.

Макет массива для страницы с несколькими расами

Array (
    [div] => array (
        [0] => array (
            ['venue_id'] = 02222
            ['venue_name'] = 'Hove'
            ['race_id'] = 9222
        )
        [1] => array (
            ['venue_id'] = 03333
            ['venue_name'] = 'Romford'
            ['race_id'] = 2442
        )
        //...and so on
    )
)

Макет массива для страницы только с одной расой

Array (
    [div] => array (
        ['venue_id'] = 02222
        ['venue_name'] = 'Hove'
        ['race_id'] = 9222
    )
)

В приложении в настоящее время я использую простой оператор foreach для перебора массива.Тем не менее, это, очевидно, не будет работать со вторым примером, и мне нужен обходной путь.

Пример оператора foreach

foreach($result['div'] as $race) {
    echo 'Venue ID: '.$race['venue_id'];
    echo 'Venue Name: '.$race['venue_name'];
    echo 'Race ID: '.$race['race_id'];
}

Любая помощь будет высоко ценится!*

Дан

Ответы [ 4 ]

1 голос
/ 27 февраля 2011

Посмотрите на значение count, которое возвращается со всеми наборами результатов YQL.Если результат только один, то принудительно он должен быть массивом (с одним элементом), как если бы было несколько результатов.

Так что-то вродеостальной части вашего сценария не нужно заботиться о структуре результатов.

1 голос
/ 27 февраля 2011

Я бы сделал это ..

if (! Isset ($ array ['div'] [0])) $ array ['div'] = array ($ array ['div']);

Таким образом, мне не нужно иметь два метода итерации.

0 голосов
/ 27 февраля 2011

Так же просто, как:

function format_race($race) {
    echo 'Venue ID: '.$race['venue_id'];
    echo 'Venue Name: '.$race['venue_name'];
    echo 'Race ID: '.$race['race_id']  
}
if (isset($result['div']['venue_id'])) {
    format_race($result);
} else {
    array_map('format_race', $result);
}

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

Обратите внимание, что здесь я немного злоупотребляю array_map, вероятно, использование foreach ($ result as $ race) сделает вашу программу более читабельной для других программистов php, если все, что вам нужно сделать, это просто напечатать.

0 голосов
/ 27 февраля 2011

А как же:

if ( isset($result['div'][0])){
     //first iteration method
} else{
    //second iteration method
}
...