通过多个值搜索多维数组

时间:2019-09-03 14:58:25

标签: php arrays

我有一个数组,我确定其中有一些重复的值,我想在此数组中搜索并找到重复的值,然后返回该数组的键。

让我解释一个例子,这是我的数组:

[
  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
  ]
];

现在,我想同时通过namefamilyemail在该数组中进行搜索,并返回父级的键(在此示例中为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 个答案:

答案 0 :(得分:4)

您可以使用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()));

实时示例:3v4l

相关问题