3 回答

TA贡献1780条经验 获得超5个赞
如果我只使用数组 2 和一个简单的foreach循环,我可以这样做:
$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
)
)
)
如果该代码在函数中,那就太好了:
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条经验 获得超2个赞
对于您的数组,您不需要第一个循环,但如果您的数组中有多个数组。只需循环和 grep 以键开头的项目:
foreach($array1 as $key => $inner) {
foreach($inner as $k) {
$result[$key][$k] = preg_grep("/^$k/", $array2[0]);
}
}
使用给定的数组:
foreach($array1[0] as $k) {
$result[0][$k] = preg_grep("/^$k/", $array2[0]);
}

TA贡献1840条经验 获得超5个赞
那么,这两个simple
和elegant
的方式在这种情况下,因为这可能是基于舆论似乎不大可能给我。一个简单的 foreach 是实现这一目标的最简单有效的方法。但是,为了优雅,您可以使用array_walk、array_fill和array_combine来实现这一点。
<?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 关注
- 150 浏览
添加回答
举报