указатели на ассоциативный массив / обходной массив - PullRequest
2 голосов
/ 10 февраля 2011

Работают ли next() и prev() на ассоциативных массивах?

Я пытаюсь пройти через набор данных, который использует две записи, чтобы описать одну «игру», если хотите. Поэтому, когда я нахожусь на второй записи с соответствующим идентификатором, мне нужно посмотреть на запись раньше и взять eg_item['final_score'].

{"id":"75", "team_name":"TEAM1", "home_team_name":"TEAM1", "image":"TEAM1_HOME.png", "final_score":"37"}, 
{"id":"75", "team_name":"TEAM2", "home_team_name":"TEAM2", "image":"TEAM2_AWAY.png", "final_score":"10"}, 
{"id":"76", "team_name":"TEAM1", "home_team_name":"TEAM1", "image":"TEAM1_HOME.png", "final_score":"10"}, 
{"id":"76", "team_name":"TEAM2", "home_team_name":"TEAM2", "image":"TEAM2_AWAY.png", "final_score":"14"},

Все примеры, которые я нашел, используют примеры типа lame array('one','two',three'), которые просто не помогают.

пример кода:

foreach( $json_output as $eg_item ) :

    if( $this_game_id == $last_game_id ) :
        // get this records info
        $b_score = $eg_item['final_score'];
        $b_team_name = $eg_item['team_name'];
        prev( $json_output );
            // get previous records info
        $a_score = $eg_item['final_score'];
        $a_team_name = $eg_item['team_name'];
        $a_game_id = $eg_item['id'];
        // put pointer back
        next( $json_output );    
    else :  
        // skip next record     
    endif;

endforeach;

Ответы [ 2 ]

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

Да, они работают просто отлично, вот небольшой тестовый пример, который я сделал:

<?php
$sample = array(
    "first" => Array("a","d","c"),
    "second" => Array("a","d","c"),
    "third" => Array("a","d","c"),
    "fourth" => Array("a","d","c")
);

while(next($sample))
{
    $item = current($sample);
    echo key($sample) . "\n";

    if(is_array($item))
    {
        echo "\t" . current($item) . "\n";
        while(next($item))
        {
            echo "\t" . current($item) . "\n";
        }
    }
}
?>

вывод: http://codepad.org/2ZeqzWcx

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

Это похоже на массив ассоциативных массивов, верно? Если это так, циклически просматривайте их по индексу 2 за раз, тогда вы можете просматривать текущий внутренний массив и предыдущий внутренний массив в каждой итерации цикла:

for ($i = 1; $i < count($array); $i+= 2) {
  $current = $array[$i];
  $last = $array[$i-1];
  //$current['final_score'], $last['final_score'], etc
}
...