根据某个键

时间:2015-12-03 23:35:45

标签: php arrays

我有一个名为$ data的数组,每个数组都包含一个包含" listid"和"状态"如下所示,循环遍历和var_dumping $ data中的每个元素:

array(2) { ["listid"]=> string(1) "0" ["status"]=> string(1) "0" } 
array(2) { ["listid"]=> string(2) "17" ["status"]=> string(1) "2" } 
array(2) { ["listid"]=> string(2) "17" ["status"]=> string(1) "4" } 
array(2) { ["listid"]=> string(2) "17" ["status"]=> string(1) "0" } 
array(2) { ["listid"]=> string(1) "0" ["status"]=> string(1) "6" } 
array(2) { ["listid"]=> string(2) "17" ["status"]=> string(1) "1" } 
array(2) { ["listid"]=> string(2) "17" ["status"]=> string(1) "0" } 
array(2) { ["listid"]=> string(2) "17" ["status"]=> string(1) "2" } 

我想重新安排这个阵列按照" listid"进行分组。 所以新数组应该类似于:

$new_array[0]["listid"]==17
$new_array[0]["status"]==array(2,4,0,1,0,2)
$new_array[1]["listid"]==0
$new_array[1]["status"]==array(0,6)

如何将原始数组重新排列为此格式,是否有可以执行此操作的php函数?

3 个答案:

答案 0 :(得分:1)

通常,您将遍历数组并使用要作为新数组中的键分组的值将值分配给新数组。像这样:

$newArray = array();

foreach($data as $v){
    $newArray[$v['listid']]['status'][] = $v['status'];
    $newArray[$v['listid']]['listid'] = $v['listid'];
}
//to reset the keys back to 0-N, use array_values
$newArray = array_values($newArray);

答案 1 :(得分:1)

当你在$ new_array上调用array_values时会发生什么?

$new_array = array_values($new_array);

array_values()将重置数字键。从我看到的,你需要的只是主键的数字排序,listid将首先出现,状态将随后作为次要,自然而然。

答案 2 :(得分:1)

只需循环遍历$data,然后使用isset()listid跟踪每个$new_array_item

$new_array_data = array();

foreach($data as $data_key => $data_item) {

    $listid = $data_item['listid'];

    if($new_array_data && !empty($new_array_data) && isset($new_array_data[$listid])) {
        $new_array_item = $new_array_data[$listid];
    } else {
        $new_array_item = array();
    }

    $new_array_item['listid'] = $listid;
    $new_array_item['status'][] = $data_item['status'];
    $new_array_item['status'] = array_unique($new_array_item['status']);

    $new_array_data[$listid] = $new_array_item;

}