2015-12-03 41 views
0

我有通過循環和var_dumping在$數據中的各元件時叫做$數據排列的,如下所示含有「listid」和「狀態」的陣列中的每個包括:重新安排基於陣列的某些關鍵

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函數可以做到這一點?

+1

在'$ data'上構建for/foreach循環,根據需要爲新的數組結構分配值。 – Scuzzy

+1

通常,您可以遍歷數組,並將值分配給新數組,並使用要分組的值作爲新數組中的鍵。 –

+0

爲了讓生活更輕鬆,請在'$ new_array'上使用'listid'作爲數組索引,以便您輕鬆地定位作業。如果你需要返回一個0,1,2數組索引,使用'array_values()'。 – Scuzzy

回答

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); 
+0

謝謝!那就是訣竅 – dlofrodloh

1

當你在$ new_array上調用array_values它自己會發生什麼?

$new_array = array_values($new_array); 

array_values()將復位數字鍵。從我所看到的,你所需要的只是主鍵的數字排序,listid會先到達,狀態會作爲次要的,自然而然的。

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; 

}