是的,這已經通過使用不同的方法被無數次地回答,在大多數情況下,它可以工作,但不適用於我的情況,請允許我解釋。
以鍵值爲基礎的組數組
我從一個CSV文件構建一個數組,這是很容易的部分,困難的部分是,我的是,我必須從第一個數組構建另一個數組,根據一個鍵值對結果進行分組,問題是,這個值是不是一個數組,也不是一個簡單的字符串...
這是從CSV的陣列的示例文件
[0] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-1
)
[1] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-2
)
[2] => Array
(
[key_1] => FOO
[cats] => /30/10/
[key_2] => FTU-3
)
[3] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-4
)
[4] => Array
(
[key_1] => FOO
[cats] => /10/
[key_2] => FTU-5
)
[0] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-6
)
最後數組看起來像此基礎上欄cats
:
[30] => Array
(
[0] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-1
)
[1] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-2
)
[1] => Array
(
[key_1] => FOO
[cats] => /30/10/
[key_2] => FTU-3
)
[15] => Array
(
[0] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-4
)
[1] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-6
)
[10] => Array
(
[0] => Array
(
[key_1] => FOO
[cats] => /30/10/
[key_2] => FTU-3
)
[1] => Array
(
[key_1] => FOO
[cats] => /10/
[key_2] => FTU-5
)
我正在尋找這個This answer這是最接近我需要,但沒有工作,這就是爲什麼我要求幫助。
更新:我想我只是解決了它...
foreach($firstarr as $k => $v) {
$cats = array_filter(explode('/', $v['cats']));
foreach($cats as $ks=>$vs) {
if(stripos($v['cats'], $vs)){
$pp[$vs][] = $v;
}
}
}
看起來很不錯。
這是對我的更新同樣的邏輯,。請參閱代碼中的if($ key ==「」),而是使用array_filter(),它的作用相同,您的答案在更新後發佈了一分鐘,因此不允許我選擇答案只是尚未... – Tanker
array_filter - 優雅的解決方案,但ID爲0的類別將被忽略。 如果是這樣,那麼!empty($ key)在循環中比array_filter更好 - 因爲它也通過數組元素 –