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

按多个值在多维数组中搜索

按多个值在多维数组中搜索

PHP
牧羊人nacy 2021-12-24 15:30:23
我有一个数组,我确定其中有一些重复的值,我想在这个数组中搜索并找到重复的值并返回该数组的键。让我用一个例子来解释,这是我的数组:[  0 => [      'name' => 'name0',      'family' => 'family0',      'email' => 'email0@sample.com',      'rate' => 10  ],  1 => [      'name' => 'name1',      'family' => 'family1',      'email' => 'email1@sample.com',      'rate' => 4  ],  2 => [      'name' => 'name0',      'family' => 'family0',      'email' => 'email0@sample.com',      'rate' => 6  ]];现在,我想在这个数组中搜索name, family, 并email同时返回父项的键(在本例中为 0 和 2)。因为我想创建一个这样的新数组:[  0 => [      'name' => 'name0',      'family' => 'family0',      'email' => 'email0@sample.com',      'rate' => [          10,          6      ]  ],  1 => [      'name' => 'name1',      'family' => 'family1',      'email' => 'email1@sample.com',      'rate' => [          4      ]  ],];我怎样才能在 PHP 中做到这一点?
查看完整描述

1 回答

?
ITMISS

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

您可以使用array-reduce并使用 3 个类似的字段作为键。


定义一个创建密钥并设置或添加速率的函数:


function combineRate($carry, $item) {

    $k = implode('###', array($item['name'], $item['family'], $item['email']));

    if (isset($carry[$k]))

        $carry[$k]['rate'][] = $item['rate'];

    else {

        $item['rate'] = [$item['rate']];

        $carry[$k] = $item;

    }

    return $carry;

}

用空数组调用它:


$res = array_values(array_reduce($a, 'combineRate', array()));


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

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