Можно ли иметь более одного ключа в цикле? - PullRequest
0 голосов
/ 20 сентября 2011

У меня нет проблем, но я ищу другое, может быть, лучшее или более быстрое решение. У меня есть массив с двумя ключами ALL и ART:

$myData = Array (
 [ALL] => Array (
   [0] => Array (
    [ID_COUNTRY] => 23
    [DELIVERY_DAYS] => 23
    [AMOUNT] => 23
   )
  [1] => Array (
   [ID_COUNTRY] => 30
   [DELIVERY_DAYS] => 30
   [AMOUNT] => 30
  )
 )
 [ART] => Array (
  [0] => Array (
   [ID_COUNTRY] => 10
   [DELIVERY_DAYS] => 10
   [AMOUNT] => 10
  )
  [1] => Array (
   [ID_COUNTRY] => 2
   [DELIVERY_DAYS] => 20
   [AMOUNT] => 20
  )
 )
)

И иметь 2 цикла foreach для проверки значений

<?php 
foreach ($myData as $key1=>$key2) {
  foreach ($key2 as $key=>$data) { 
    ...
  }
}
?>

Возможно сделать что-то подобное или это единственное решение использовать два цикла foreach без каких-либо дополнительных библиотек.

<?php
foreach($myData as $key1=>$key2=>$value) {
 echo $key1; // [ALL] or [ART]
 echo $key2; // [ALL][$key2] or [ART][$key2];
}
?>

Ответы [ 3 ]

3 голосов
/ 20 сентября 2011

Если вы хотите перебрать свой многомерный массив, вам нужен предоставленный код:

foreach ($myData as $key1=>$key2) {
  foreach ($key2 as $key=>$data) { 
    ...
  }
}

Нельзя обойтись без использования чего-то, что в конце концов сделало бы это тоже. Здесь нет скорости, которую нужно набирать. И если есть, то это будет микрооптимизация, которую вы должны игнорировать:)

1 голос
/ 20 сентября 2011

Это невозможно. Но вы можете сделать это как

<?php 
foreach ($myData as $key1=>$key2) {
  foreach ($key2 as $key=>$data) { 
    echo $key1;
    echo $key2;
  }
}
?>
0 голосов
/ 20 сентября 2011

Возможно, не совсем то, что вы ищете;Я все еще хотел уведомить вас об этом, хотя.Вы можете рекурсивно перебирать многомерный массив, используя RecursiveArrayIterator в сочетании с RecursiveIteratorIterator:

$rii = new RecursiveIteratorIterator( new RecursiveArrayIterator( $myData ), RecursiveIteratorIterator::SELF_FIRST );
foreach( $rii as $key => $value )
{
    echo $key;

    // you can keep track of the current depth with:
    $depth = $rii->getDepth();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...