2011-06-11 70 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; 
}