比较并组合多维数组,然后按降序排序 PHP

我有 2 个多数组、配置文件和编码数组,如下所示


    $profiles = array(

        array(

            'user_id'      => 'fcc3d884-fbef-438a-9c86-0ad52c9b1223',

            'first_name'   => 'Narñia',

            'middle_name'  => 'Ñ',

            'last_name'    => 'Cruz',

            'ext'          => ''

        ),

        array(

            'user_id'      => '0d31557d-1e9f-4db3-ac0d-72e1709fe89c',

            'first_name'   => 'Randy',

            'middle_name'  => 'O',

            'last_name'    => 'Rocker',

            'ext'          => ''

        ),

        array(

            'user_id'      => '0f93f169-cf56-49df-a76b-7596446104c6',

            'first_name'   => 'Qwerty',

            'middle_name'  => 'K',

            'last_name'    => 'Asdfg',

            'ext'          => ''

        ),

        array(

            'user_id'      => '23b1f4a2-034c-43b4-96b7-3191d78cead1',

            'first_name'   => 'Johny',

            'middle_name'  => 'L',

            'last_name'    => 'Walker',

            'ext'          => ''

        )

    );


    $encoded = array(

        array(

            'encoder_id' => '0d31557d-1e9f-4db3-ac0d-72e1709fe89c',

            'fullname'   => 'Randy O. Rocker',

            'encoded'    => 10,

        ),

        array(

            'encoder_id' => '23b1f4a2-034c-43b4-96b7-3191d78cead1',

            'fullname'   => 'John L. Walker',

            'encoded'    => 20,

        )

    );

现在我想从 $profiles 获取一些数据,然后在user_id和编码器_id匹配时合并到 $encoded 数组,我有这段代码,但它似乎错误,它只获取“John L. Waler”数据。这是我的代码。


慕桂英3389331
浏览 107回答 3
3回答

www说

您可以通过使用;按值重新索引$encoded数组来使您的生活更轻松。那么您不必每次都搜索数组来查找值,您可以直接使用. 提取数据后,您可以使用按值排序:encoder_idarray_columnuser_idissetusortencoded$encoded_ids = array_column($encoded, null, 'encoder_id');$data = array();foreach ($profiles as $profile) {    $user_id = $profile['user_id'];    if (isset($encoded_ids[$user_id])) {        $data[] = array('id' => $user_id,                        'fullname' => $encoded_ids[$user_id]['fullname'],                        'encoded' => $encoded_ids[$user_id]['encoded']                        );    }    else {        $data[] = array('id' => $user_id,                        'fullname' => "${profile['first_name']} ${profile['middle_name']} ${profile['last_name']}",                        'encoded' => 0                        );    }}usort($data, function ($a, $b) { return $b['encoded'] - $a['encoded'];});print_r($data);输出:Array(    [0] => Array        (            [id] => 23b1f4a2-034c-43b4-96b7-3191d78cead1            [fullname] => John L. Walker            [encoded] => 20        )        [1] => Array        (            [id] => 0d31557d-1e9f-4db3-ac0d-72e1709fe89c            [fullname] => Randy O. Rocker            [encoded] => 10        )        [2] => Array        (            [id] => fcc3d884-fbef-438a-9c86-0ad52c9b1223            [fullname] => Narñia Ñ Cruz            [encoded] => 0        )        [3] => Array        (            [id] => 0f93f169-cf56-49df-a76b-7596446104c6            [fullname] => Qwerty K Asdfg            [encoded] => 0        )    )3v4l.org 上的演示

叮当猫咪

使用array_reduce:$encodedByEncoderId = array_column($encoded, null, 'encoder_id');$combined = array_reduce($profiles, function (array $combined, array $profile) use ($encodedByEncoderId): array {  $combined[] = [    'id' => $profile['user_id'],    'fullname' => $encodedByEncoderId[$profile['user_id']]['fullname']       ?? "{$profile['first_name']} {$profile['middle_name']}. {$profile['last_name']}",    'encoded' => $encodedByEncoderId[$profile['user_id']]['encoded']       ?? 0  ];  return $combined;}, []);演示: https: //3v4l.org/kKBru

慕莱坞森

尝试这个!$data = [];foreach ($profiles as $key => $val) {    $user_id = $val['user_id'];    $is_matched = 0;    $encoded_data = [];    foreach($encoded as $k => $v){        if ($user_id == $v['encoder_id']) {            $is_matched = 1;            $encoded_data = $v;        }    }    $ext_name = ($val['ext'] == '') ? '' : $val['ext'];    $fullname = $val['first_name'].' '.substr($val['middle_name'], 0, 1).'. '.$val['last_name'].' '.$ext_name;    $data[$key] = array(        'id'       => ($is_matched == 1) ? $encoded_data['encoder_id'] : $user_id,        'fullname' => ($is_matched == 1) ? $encoded_data['fullname'] : $fullname,        'encoded'  => ($is_matched == 1) ? $encoded_data['encoded'] : 0    );}
打开App,查看更多内容
随时随地看视频慕课网APP