[php]巧妙的使用array

$data =array(
array('id'=>1,'key'=>'a'),
array('id'=>2,'key'=>'a'),
array('id'=>3,'key'=>'a'),
array('id'=>4,'key'=>'b'),
array('id'=>5,'key'=>'b'),
array('id'=>6,'key'=>'c'),
array('id'=>7,'key'=>'d'),
array('id'=>7,'key'=>'d'),
);
foreach ($data as $val)
{
$arr1[$val['id']] = $val['key'];
$arr2[$val['key']] = $val;//相同键值后面的覆盖前的
}

今天碰到了这么一个问题,处理的数组$tempArray为如下所示形式(key已经排 序),然后要根据这个结果进行分块的处理,我用的方法是按key区分块,然后在将块赋给其他的变量,然后再进行一些操作,这样用到了很多的for和 foreach,而且代码量也很大,所以被退回来了。

经过上面的指导,发现真的好简单,现在与大家一同分享。

ID FIELD1 FIELD2 FIELD3 FIELD4 Key
1 *** *** *** *** meat1
2 *** *** *** *** meat1
3 *** *** *** *** meat1
4 *** *** *** *** meat1
5 *** *** *** *** fruit2
6 *** *** *** *** fruit2
7 *** *** *** *** fruit2
8 *** *** *** *** fruit2
9 *** *** *** *** fruit2
10 *** *** *** *** food3
11 *** *** *** *** food3

现在有如上所示的结果

要求:要对这个已经按key进行排序了的数组进行操作,相同key的项进行处理。

提示:这个是很典型的母子表的结构,也就是说其实它是两张表的合并,可以这样处理成两个数组,方便数组里面对块的操作
array1:ID|Key

ID Key
1 meat1
2 meat1
3 meat1
4 meat1
5 fruit2
6 fruit2
7 fruit2
8 fruit2
9 fruit2
10 food3
11 food3

array2:key => array(ID,FIELD1,FIELD2,FIELD3,FIELD4,FIELD5,Key)

ID FIELD1 FIELD2 FIELD3 FIELD4 Key
meat1=> 1 *** *** *** *** meat1
2 *** *** *** *** meat1
3 *** *** *** *** meat1
4 *** *** *** *** meat1
fruit2=> 5 *** *** *** *** fruit2
6 *** *** *** *** fruit2
7 *** *** *** *** fruit2
8 *** *** *** *** fruit2
9 *** *** *** *** fruit2
food3=> 10 *** *** *** *** food3
11 *** *** *** *** food3

实现如上数组分离代码

这样后,访问tempArray的块数据就非常方便了

foreach($tempArray as $row){

  array1[$row['ID']] = $row['Key'];

  array2[$row['Key']][] = $row;

}

访问和处理代码

foreach($array1 as $ID => $Key){

  $this->doSomeThing($ID);

  //访问tempArray的块数组$array2[$Key]

  $this->doSomeThing2($array2[$Key]);

}

摘自:http://www.cnblogs.com/zcy_soft/archive/2011/03/24/1994279.html

posted @ 2011-04-07 10:58  longbaobao  阅读(128)  评论(0)    收藏  举报