3 回答

TA貢獻1780條經(jīng)驗 獲得超5個贊
如果我只使用數(shù)組 2 和一個簡單的foreach循環(huán),我可以這樣做:
$array2 = [['C1_complete',
'C1_29-95',
'C1_49-95',
'AC_complete',
'AC_29-95']];
$buffer = [];
foreach ($array2[0] as $value) {
$buffer[substr($value, 0, 2)][] = $value;
}
$result[] = $buffer;
echo '<pre>';
print_r($result);
echo '</pre>';
輸出是:
Array
(
[0] => Array
(
[C1] => Array
(
[0] => C1_complete
[1] => C1_29-95
[2] => C1_49-95
)
[AC] => Array
(
[0] => AC_complete
[1] => AC_29-95
)
)
)
如果該代碼在函數(shù)中,那就太好了:
function classify($array)
{
$result = [];
foreach ($array[0] as $value) {
$result[substr($value, 0, 2)][] = $value;
}
return [$result];
}
$array2 = [['C1_complete',
'C1_29-95',
'C1_49-95',
'AC_complete',
'AC_29-95']];
echo '<pre>';
print_r(classify($array2));
echo '</pre>';
輸出保持不變。

TA貢獻2011條經(jīng)驗 獲得超2個贊
對于您的數(shù)組,您不需要第一個循環(huán),但如果您的數(shù)組中有多個數(shù)組。只需循環(huán)和 grep 以鍵開頭的項目:
foreach($array1 as $key => $inner) {
foreach($inner as $k) {
$result[$key][$k] = preg_grep("/^$k/", $array2[0]);
}
}
使用給定的數(shù)組:
foreach($array1[0] as $k) {
$result[0][$k] = preg_grep("/^$k/", $array2[0]);
}

TA貢獻1840條經(jīng)驗 獲得超5個贊
那么,這兩個simple
和elegant
的方式在這種情況下,因為這可能是基于輿論似乎不大可能給我。一個簡單的 foreach 是實現(xiàn)這一目標的最簡單有效的方法。但是,為了優(yōu)雅,您可以使用array_walk、array_fill和array_combine來實現(xiàn)這一點。
<?php
$arr1 = Array(
Array
(
'C1',
'C1',
'C1',
'AC',
'AC'
)
);
$arr2 = Array(
Array(
'C1_complete',
'C1_29-95',
'C1_49-95',
'AC_complete',
'AC_29-95'
)
);
$data = array_combine(array_values($arr1[0]),array_fill(0,count($arr1[0]),[]));
array_walk($arr2[0],function($value) use (&$data){
if(isset($data[explode("_",$value)[0]])) $data[explode("_",$value)[0]][] = $value;
});
$data = [$data]; // since you want it inside another array.
print_r($data);
演示: https : //3v4l.org/VhFLH7
- 3 回答
- 0 關注
- 200 瀏覽
添加回答
舉報