PHP:合并数组并添加键值

我有一个包含数组的多维数组,每个数组都包含一个artisan和closeness键。我想合并多个数组(如果相同)artisans到一个数组,它是从中合并的数组closeness的值的总和。closeness


也就是说,这个数组:


Array

(

    [0] => Array

        (

            [artisan] => carpenter

            [closeness] => 0.8

        )


    [1] => Array

        (

            [artisan] => brick layer

            [closeness] => 0.4

        )


    [2] => Array

        (

            [artisan] => electrician

            [closeness] => 0.9

        )


    [3] => Array

        (

            [artisan] => carpenter

            [closeness] => 0.8

            [is_real] => 1

        )


    [4] => Array

        (

            [artisan] => brick layer

            [closeness] => 0.9

            [is_real] => 1

        )


)

应该变成:


Array

(

    [0] => Array

        (

            [artisan] => carpenter

            [closeness] => 1.6 //0.8+0.8

        )


    [1] => Array

        (

            [artisan] => brick layer

            [closeness] => 1.3  //0.4+0.9

        )


    [2] => Array

        (

            [artisan] => electrician

            [closeness] => 0.9 //remains 0.9 because it is the only array with artisan value of electrician

        )


鸿蒙传说
浏览 104回答 2
2回答

慕仙森

试试这个循环//create new array to hold values in the format you need$new_array = [];//loop through old arrayforeach($old_array as $arr) {    $artisan = $arr['artisan'];    $closeness = $arr['closeness'];    //check if `$artisan` key does not exists in `$new_array`    if(!array_key_exists($artisan, $new_array)) {        //create key in `$new_array` if it doesn't exist already        //for this key, create an array containing the values in the format you need        $new_array[$artisan] = [            'artisan' => $artisan,             'closeness' => $closeness        ];    } else {        //increase closeness in `$new_array` with key `$artisan` if key did already exist        $new_array[$artisan]['closeness'] += $closeness;    }}//replace keys which contain `$artisan` with sequential numbers, as per your expected output.//if you don't do this, it will still work, but your array keys will be equal to the artisan type.$new_array = array_values($new_array);print_r($new_array);结果:Array(    [0] => Array        (            [artisan] => carpenter            [closeness] => 1.6        )    [1] => Array        (            [artisan] => brick layer            [closeness] => 1.3        )    [2] => Array        (            [artisan] => electrician            [closeness] => 0.9        ))如果删除该array_values()行,结果将如下所示:Array(    [carpenter] => Array        (            [artisan] => carpenter            [closeness] => 1.6        )    [brick layer] => Array        (            [artisan] => brick layer            [closeness] => 1.3        )    [electrician] => Array        (            [artisan] => electrician            [closeness] => 0.9        ))

冉冉说

怎么样:$results = array(); // create results arrayforeach( $array as $k => $i ) {    $found = false;    foreach ( $results as $k => $r ) {        if ( $r[ "artisan" ] == $i[ "artisan" ] ) {            $results[ $k ][ "closeness" ] += $i[ "closeness" ];            $found = true;            break;        }    }    if ( ! $found ) array_push( $results, $i );}
打开App,查看更多内容
随时随地看视频慕课网APP