使用数组生成单个数组


Working with arrays to produce a single array

我有一个数组,可以有许多值在任何给定的点,我想要完成的是组合所有的数组索引,并形成一个索引与我的最终值。合并其他相同的值

假设我有

下面的数组结果
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