Разделение многомерного массива - PullRequest
1 голос
/ 11 июня 2011

у меня есть многомерный массив, который выглядит как

$a[] = array('id' => '1', 'city' => 'Delhi', 'pin' => '11A', 'country' => 'India');
$a[] = array('id' => '2', 'city' => 'Delhi', 'pin' => '11B', 'country' => 'India');
$a[] = array('id' => '3', 'city' => 'Delhi', 'pin' => '11C', 'country' => 'India');
$a[] = array('id' => '5', 'city' => 'Bombay', 'pin' => '22A', 'country' => 'India');
$a[] = array('id' => '6', 'city' => 'Bombay', 'pin' => '22B', 'country' => 'India');
$a[] = array('id' => '8', 'city' => 'Bombay', 'pin' => '22D', 'country' => 'India');
$a[] = array('id' => '9', 'city' => 'Chennai', 'pin' => '44A', 'country' => 'India');
$a[] = array('id' => '10', 'city' => 'Chennai', 'pin' => '44B', 'country' => 'India');
$a[] = array('id' => '12', 'city' => 'Chennai', 'pin' => '44D', 'country' => 'India');

Мне нужно разделить их на отдельный массив на основе названия города. например,

$delhi_array[] = array('id' => '1', 'city' => 'Delhi', 'pin' => '11A', 'country' => 'India');
$delhi_array[] = array('id' => '2', 'city' => 'Delhi', 'pin' => '11B', 'country' => 'India');
$bombay_array[] = array('id' => '5', 'city' => 'Bombay', 'pin' => '22A', 'country' => 'India');

это возможно ???? как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 11 июня 2011

Лучше всего было бы создать еще один многомерный массив с городами в качестве ключей для первого уровня вместо отдельных переменных:

$result = array();
foreach ($a as $v) {
    $city = $v['city'];
    if (!isset($result[$city])) $result[$city] = array();
    $result[$city][] = $v;
}

Таким образом, вы получите:

Array
(
    [Delhi] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [city] => Delhi
                    [pin] => 11A
                    [country] => India
                )
            ...

    [Bombay] => Array
        (
            [0] => Array
                (
                    [id] => 5
                    [city] => Bombay
                    [pin] => 22A
                    [country] => India
                )
            ...

    [Chennai] => Array
        (
            [0] => Array
                (
                    [id] => 9
                    [city] => Chennai
                    [pin] => 44A
                    [country] => India
                )
            ...

)

Тогда вы можете получить к нему доступ как:

foreach ($result as $city => $elements) {
    echo $city;
    foreach ($elements as $element) {
        echo $element['pin'];
    }
}
0 голосов
/ 24 августа 2011

вы можете попытаться вдохновить на этом примере, он показывает, как разделить на 2 массива

$result1=array();
$result2=array();
foreach ($query as $dim) {
  foreach ($dim as $key => $value)
      $result1[] = $key;
      $result2[] = $value;
}
0 голосов
/ 11 июня 2011

A для цикла с переменными переменными

foreach( $a as $row )
   ${strtolower($row['city']).'_array'}[] = $row;

Это фактически возьмет все, что находится в элементе 'city' каждой строки, приведёт его к нижнему регистру, добавит _array и использует это как имя переменной и добавит к ней строку.

В вашем примере, он будет делать именно то, что вы просили.

Безопасно ли создавать такие имена переменных? Вероятно, нет, если у вас нет полного контроля над тем, что может идти в поле «город».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...