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

PHP:从字典列表中按键获取值列表

PHP:从字典列表中按键获取值列表

PHP
慕斯709654 2023-09-22 16:17:25
Array (     [0] => Array (      [id] => 1       [user_id] => 15      [booked] => 2020-08-01      [sendin] => 2020-08-03      [pickup] => 2020-08-08      [duration] => 5     )    [1] => Array (      [id] => 2      [user_id] => 15      [booked] => 2020-08-01      [sendin] => 2020-08-03      [pickup] => 2020-08-08      [duration] => 5     )  )获取 id,传入user_id = 15,我想要$ids = array(1, 2)有没有一个速记方法,或者我必须编写一个函数?感谢你的帮助。
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

您可以使用array_filter查找所有具有 的子数组user_id == 15,然后array_map提取相应的id值:

$user_id = 15;

$ids = array_map(function ($a) { return $a['id']; },

                 array_filter($array, 

                              function ($a) use ($user_id) {

                                  return $a['user_id'] == $user_id; 

                              })

                 );

print_r($ids);

或者,您可以使用array_keys搜索user_id值的键(由 提取array_column),即 15 并使用这些键来array_map检索id值:

$ids = array_map(function ($k) use ($array) { return $array[$k]['id']; },
                 array_keys(array_column($array, 'user_id'), $user_id)
                 );print_r($ids);

在这两种情况下,输出(对于您的示例数据)为:

Array

(

    [0] => 1

    [1] => 2

)

3v4l.org 上的演示


查看完整回答
反对 回复 2023-09-22
?
Helenr

TA贡献1780条经验 获得超3个赞

只是想添加一个替代答案。尽管这些array_方法很方便,但它们也有缺点。在另一个答案中,第一个方法将处理数组两次(一次用于array_filter()和 结果array_map()),第二个方法将执行 3 次。这看起来很方便,但我的替代方案使用一个简单的foreach()循环。它使 1 次遍历数组并仅检查 user_id 并将其添加到列表中(如果匹配)...


$ids = [];

foreach ( $array as $user ) {

    if ( $user['user_id'] == $user_id ) {

        $ids[] = $user['id'];

    }

}

print_r($ids);

这使...


Array

(

    [0] => 1

    [1] => 2

)


查看完整回答
反对 回复 2023-09-22
  • 2 回答
  • 0 关注
  • 57 浏览

添加回答

举报

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