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

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)

有没有一个速记方法,或者我必须编写一个函数?感谢你的帮助。


慕斯709654
浏览 66回答 2
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 上的演示

Helenr

只是想添加一个替代答案。尽管这些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)
打开App,查看更多内容
随时随地看视频慕课网APP