我有一个数组,可以有许多值在任何给定的点,我想要完成的是组合所有的数组索引,并形成一个索引与我的最终值。合并其他相同的值
假设我有
下面的数组结果Array
(
[0] => stdClass Object
(
[component] => sodium chloride
[generic_results] => Average:=99.20%
)
[1] => stdClass Object
(
[component] => sodium chloride
[generic_results] => RSD:=0.54%
)
[2] => stdClass Object
(
[component] => sodium chloride
[generic_results] => n:=3
)
)
我想要的是这样的东西
Array
(
[0] => stdClass Object
(
[component] => sodium chloride
[generic_results] => Average:=99.20%,RSD:=0.54%, n:=3
)
)
我已经尝试过数组唯一,但它不工作。
生成结果的示例代码: $arr=array(
(object) array(
'component'=>'sodium chloride',
'generic_results'=>'Average:=99'
),
(object) array(
'component'=>'sodium chloride',
'generic_results'=>'RSD:=0.54'
),
(object) array(
'component'=>'sodium chloride',
'generic_results'=>'n:=3'
)
);
print('<pre>');
print_r($arr);
print('</pre>');
对于这个问题有什么建议吗? 试试这个
$new = array();
foreach ($array as $obj){
// By setting the key you guarantee it being unique
$new[$obj->component][$obj->generic_results] = $obj->generic_results;
}
$new2 = array();
foreach ($new as $comp=>$arr){
$new2['component'][$comp] = implode(',',$arr);
}
这将返回一个数组,但你可以(虽然它并不总是足够的)然后使用json_decode(json_encode($new2), false)将其转换为对象。
您可以使用array_reduce
,它遍历数组,将所有元素与给定的回调函数组合在一起:
$result = array_reduce($arr, function($result, $item) {
if ($result === null) {
// initialize with first item
return [$item];
}
// add generic_results of current item to result
$result[0]->generic_results .= ',' . $item->generic_results;
return $result;
}
);
演示:https://3v4l.org/KBUBl