Группировать массив по значению - PullRequest
0 голосов
/ 20 мая 2019

У меня есть такой массив

Array (

[1] => Array
    (
        [name] => 123
        [id] => 105740727
        [email] =>fghfhfh
        [phrases_relevant] => 123
        [searches_id] => 105740727
    )

[2] => Array
    (
        [name] => porshe
        [id] => 105713889
        [email] => fghfghf
        [phrases_relevant] => porshe
        [searches_id] => 105713889
    )

 [3] => Array
    (
        [name] => porshe
        [id] => 105713889
        [email] => fghfghf
        [phrases_relevant] => merce
        [searches_id] => 105713889
    )

Мне нужно сгруппировать эту группу по значению. Выходной массив должен выглядеть следующим образом. У измерения второго и третьего одинаковые поиски_id

  [0] => Array
    (
        [email] => fghfghf
        [projects]=>
              [porshe] => [porshe, merce]
  [1] => ...

edit;

моя попытка;

    foreach ($results as $key => $result) {
         $testArray[]['projects'][$result['name']][] = $result['phrases_relevant'];

но это вставить одну фразу;

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Сначала нужно отсортировать по searches_id, затем применить цикл,

function sortByOrder($a, $b)
{
    return $a['searches_id'] - $b['searches_id'];
}
usort($myArray, 'sortByOrder');
foreach ($myArray as $key => $value) {
    $result[$value['searches_id']]['email']      = $value['email'];
    $result[$value['searches_id']]['projects'][] = $value['phrases_relevant'];
}
$result = array_values($result); // reset keys used for array generation

Работает демо .

1 голос
/ 20 мая 2019

Вы можете использовать foreach

$res = [];
foreach($arr as $key => $value){

array_key_exists($value['id'], $res) ?
    ($res[$value['id']]['phrases_relevant'] = $res[$value['id']]['phrases_relevant'].','.$value['phrases_relevant'])
:
($res[$value['id']] = ['email' => $value['email'],'phrases_relevant' => $value['phrases_relevant']]);
}
print_r(array_values($res))

Live Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...