итерация многомерного массива и извлечение обоих отдельных значений вместе со значениями массива

#php #arrays #loops

#php #массивы #циклы

Вопрос:

У меня есть следующий массив, который мне нужно повторить. Мне нужно получить значение заголовка, а затем каждое значение «команда» и «картинка». Как я могу это сделать? Я попробовал это, но это дало мне ошибку «Недопустимое смещение строки ‘team'».

введите описание изображения здесь

         $xml = simplexml_load_file($fileName);
    
    //print_r($xml);
    $eventHeader = $xml->title;
    
    // standings array
        $standings_arr=array();
        $standings_arr["standings"]=array("header" =>(string)$eventHeader);
 
    foreach($xml->row as $item)
    {
         $standings_item=array(
        "team" => (string)$item->team,
        "picture" => (string)$item->picture,
        "v" => (string)$item->v,
        "f" => (string)$item->f,
        "p" => (string)$item->p
       );
        array_push($standings_arr["standings"], $standings_item);
    }

    foreach ($standings_arr as $row ) {
      
      $header = $row['header'];

      if (is_array($row)) 
      { 
        foreach ( $row as $key => $value ) {
          echo $value['team'];
        }
      }
    }
 

Может кто-нибудь подсказать мне, пожалуйста?

Комментарии:

1. Просто проверьте это перед вторым циклом if (is_array($row)) { foreach ($row...) { ... } } , потому header что элемент не является массивом

Ответ №1:

Если заголовок является первым элементом в массиве, вы можете shift использовать массив, а затем выполнить итерацию:

 $header = array_shift($standings);

foreach ($standings as $standing) {
    if (! is_array($standing)) continue;
    
    if (isset($standing['team'])) {
        echo $standing['team'];
    }
}
 

Комментарии:

1. А что, если в этом массиве, например, есть ключ «нижнего колонтитула»?

2. Теперь я изменил приведенный выше код, теперь я получаю значение заголовка, но все еще получаю то же предупреждение о «echo $value [‘team’];»

3. Я редактирую приведенный выше код, если он не работает, отредактируйте свой вопрос со всем определением массива.

4. Это не работает, поэтому я редактирую приведенный ниже код.

5. У меня получилось так foreach ($standings_arr как $standing) { //echo «<br><b># $num</b><br>»; foreach ($standing как $key=> $value) { if (! is_array($value)) {//echo «$key: $value <br>»; echo $value .»<br>»; } else { if (isset($value[‘team’])) { echo $value[‘team’] .»<br>»; } } } }