为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕桂英3389331 2023-08-19 10:28:17
我有 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”数据。这是我的代码。
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

您可以通过使用;按值重新索引$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 上的演示


查看完整回答
反对 回复 2023-08-19
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

使用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



查看完整回答
反对 回复 2023-08-19
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

尝试这个!


$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

    );

}


查看完整回答
反对 回复 2023-08-19
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信