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

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


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


[

  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 中做到这一点?


牧羊人nacy
浏览 126回答 1
1回答

ITMISS

您可以使用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()));
打开App,查看更多内容
随时随地看视频慕课网APP