2010-05-18 112 views
1

的价值基础多维数组我有这样重新排列的内部阵列

Array 
(
    [0] => Array 
     (
      [cat_name] => Clothing 
      [cat_id] => 1 
      [item_name] => shirt 
      [item_id] => 1 
      [src] => 177 
      [sic] => 78 
     ) 

    [1] => Array 
     (
      [cat_name] => Stationary 
      [cat_id] => 3 
      [item_name] => note book 
      [item_id] => 8 
      [src] => 50 
      [sic] => 10 
     ) 

    [2] => Array 
     (
      [cat_name] => Stationary 
      [cat_id] => 3 
      [item_name] => ball pen 
      [item_id] => 10 
      [src] => 59 
      [sic] => 58 
     ) 

    [3] => Array 
     (
      [cat_name] => Expandable 
      [cat_id] => 4 
      [item_name] => vim powder 
      [item_id] => 14 
      [src] => 34 
      [sic] => 23 
     ) 

    [4] => Array 
     (
      [cat_name] => Clothing 
      [cat_id] => 1 
      [item_name] => pant 
      [item_id] => 16 
      [src] => 100 
      [sic] => 10 
     ) 

) 
现在

数组我想要什么 首先,它通过CAT_ID排序,然后形成具有以下结构的新阵列

Array 
(
    [0] =>"Clothing"=>Array 
     (

      [0]=>Array 
      (
       [item_name] => shirt 
       [item_id] => 1 
       [src] => 177 
       [sic] => 78 
      ) 
      [1] => Array 
      (
       [item_name] => pant 
       [item_id] => 16 
       [src] => 100 
       [sic] => 10 
      ) 

     ) 
    [1] => "Stationary"=>Array 
     (
     [0] => Array 
      ( 
       [item_name] => note book 
       [item_id] => 8 
       [src] => 50 
       [sic] => 10 
      ) 

     [1] => Array 
      (
       [item_name] => ball pen 
       [item_id] => 10 
       [src] => 59 
       [sic] => 58 
      ) 

     ) 
    [2]=>"Expandable => Array 
     (
     [0] => Array 
      (
       [item_name] => vim powder 
       [item_id] => 14 
       [src] => 34 
       [sic] => 23 
      ) 
     ) 
) 

回答

3

未经测试

$output = array(); 
foreach($array as $item) { 
    if(!isset($output[$item['cat_name']])) { 
     $output[$item['cat_name']] = array(); 
    } 
    $catName = $item['cat_name']; 
    unset($item['cat_name']); 
    $output[$catName][] = $item; 
} 
+0

感谢您的快速回复。有用!但它只输出每个类别的单个数据(即每个类别的最新项目) 我想要列出所有项目详细信息的每个类别的多维数组 – diEcho 2010-05-18 10:46:52

+0

@ i-like-php我忘记了最后一行中的方括号。它应该现在工作 – cem 2010-05-18 10:51:00

+0

是的!现在这个工作!两个答案都很好...感谢Buddy – diEcho 2010-05-18 10:54:41

3
function cmp($a, $b) 
{ 
    if ($a['cat_id'] == $b['cat_id']) { 
     return 0; 
    } 
    return ($a['cat_id'] < $b['cat_id']) ? -1 : 1; 
} 
// sort by cat_id 
usort($array, 'cmp'); 

// create the grouped array 
$res = array(); 
foreach($array as &$item) { 
    $cat_name = $item['cat_name']; 
    unset($item['cat_name'], $item['cat_id']); 
    $res[$cat_name][] = $item; 
} 
+0

太棒了!这是我想要的。 Thaksssss – diEcho 2010-05-18 10:50:57

+0

你的答案也很棒!不要伤心。我会选择你的回答 – diEcho 2010-05-18 10:56:07

+2

不用担心,我想我们都是这样做的,只是为了好玩。 – nuqqsa 2010-05-18 11:02:34