нужна помощь в группировке php массива - PullRequest
2 голосов
/ 22 сентября 2010

У меня есть запрос MySQL, который выплевывает следующий массив:

Array
(
    [0] => stdClass Object
        (
            [item1] => foo 0
            [item2] => bar 0
            [catid] => 3
        )

    [1] => stdClass Object
        (
            [item1] => foo 1
            [item2] => bar 1
            [catid] => 7
        )

    [2] => stdClass Object
        (
            [item1] => foo 2
            [item2] => bar 2
            [catid] => 10
        )

    [3] => stdClass Object
        (
            [item1] => foo 3
            [item2] => bar 3
            [catid] => 7
        )

)

Мне было интересно, если бы можно было сгруппировать массив по "категории", поэтому вместо дубликатов будетбыть одной катидой с каждым объектом внутри ... если это имеет смысл?Так, скажем, catid 7 появится только один раз, с двумя item1 / item2 внутри.

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010

Как насчет этого?

foreach($results as $result) {
    $by_category[$result->catid][] = $result;
}

print_r($by_category);
4 голосов
/ 08 января 2015

Вы можете сделать это с Узо лакомствами :

 $categories = Arrays::groupBy($results, Functions::extractField('catid'));

См .: http://ouzo.readthedocs.org/en/latest/utils/arrays.html#groupby

0 голосов
/ 22 сентября 2010
$ret = array();
foreach ($array as $value) {
  foreach ($value as $key => $item) {
      if ($key == 'catid') continue;
      $ret[$value['catid']][] = $item;
  }
}
...