2011-06-11 106 views
1

我有一個多維陣列,其看起來像分裂多維數組

$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'); 

是有可能????我該怎麼做?

回答

2

做可能會產生另一多維數組,以城市作爲第一級密鑰,而不是獨立變量的最好的事情:

$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

嘿thnx的幫助,我m卡住了一個問題。我需要基於另一個數組對數組進行排序。例如...當我打印結果,我需要欽奈來第一,然後孟買然後德里...我有一個數組說:$ sortarray =(「chennai」,「孟買」,「德里」,「浦那」); – wiseone 2011-06-11 15:01:20

0

variable variables

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

這實際上會無論是在各行的「城市」元素,將它轉換爲小寫,追加_array,並使用它作爲變量的名稱和追加for循環排到它。

在你的例子中,它將完成你所要求的。

生成這樣的變量名是否安全?可能不會,除非你完全控制「城市」領域的內容。

0

你可以嘗試從T到inspirate他的例子,它顯示如何分解成2個陣列

$result1=array(); 
$result2=array(); 
foreach ($query as $dim) { 
    foreach ($dim as $key => $value) 
     $result1[] = $key; 
     $result2[] = $value; 
}