我查看了所有類似的問題和示例(有很多),但仍無法使其工作(儘管我認爲我很接近) 。如何按子數組對數組進行分組並重新分配PHP中的鍵
我有一個文本文件拉到員工安排的數組...
自定:
123,Joe,20120208,0845,1645 123,Joe,20120209,0800,1600 456,Sue,20120208,0900,1700 456,Sue,20120209,0700,1500 ...
我的代碼來生成數組:
$schedule = file_get_contents('./schedule.txt'); $s = explode("\n", $schedule); for ($i = 0; $i < count($s); $i++) { $s[$i] = explode(",", $s[$i]); } print_r($s);
輸出是:
Array ( [0] => Array ( [0] => 123 [1] => Joe [2] => 20120208 [3] => 0845 [4] => 1645 ) [1] => Array ( [0] => 123 [1] => Joe [2] => 20120209 [3] => 0800 [4] => 1600 ) [2] => Array ( [0] => 456 [1] => Sue [2] => 20120208 [3] => 0900 [4] => 1700 ) [3] => Array ( [0] => 456 [1] => Sue [2] => 20120209 [3] => 0700 [4] => 1500 ) )
我不是設法集團員工憑身份證在一個新的多維陣列的輸出是這樣的:
Array ( [123] => Array ( [0] => Array ( [0] => Joe [1] => 20120208 [2] => 0845 [3] => 1645 ) [1] => Array ( [0] => Joe [1] => 20120209 [2] => 0800 [3] => 1600 ) ) [456] => Array ( [0] => Array ( [0] => Sue [1] => 20120208 [2] => 0900 [3] => 1700 ) [1] => Array ( [0] => Sue [1] => 20120209 [2] => 0700 [3] => 1500 ) ) )
我不能爲我的生命換我圍繞着如何改變我現有的陣列到這個新頭(不同的)輸出... 我想這一點,但還是一無所獲:
$newArr = array(); foreach($s as $k => $v) { if(!isset($newArr[$v[0]])) { $newArr[$v[0]] = array(); } $newArr[$v[0]][] = array($v[0]); }
雖然我的輸出現在是:
Array ( [123] => Array ( [0] => Array ( [0] => 123 ) [1] => Array ( [0] => 123 ) ) [456] => Array ( [0] => Array ( [0] => 456 ) [1] => Array ( [0] => 456 ) ) )
有什麼想法?我知道我失去了一些東西在我的周圍行代碼:
$newArr[$v[0]][] = array($v[0]);
我試圖將其更改爲:
$newArr[$v[0]][] = array(0 => $v[1], 1 => $v[2], 2 => $v[3], 3 => $v[4]);
這給我正確的輸出,但我現在得到了一個未定義的偏移誤差。另外,如果鑰匙在子陣列更改的數量,這個代碼現在僅限於4我明確地進入...
哇,看起來我實際上追求的都是錯的 - 完美無缺。感謝您的快速。 – MonkishTypist 2012-02-16 23:41:32