PHP diziler gruplandırma

4 Cevap php

Ben 200 öğeleri bir dizi var. Ben bir ortak değere sahip çıktı diziyi ama grubunu ürün istiyorum. BY yöntemi SQL'ın GROUP benzer. Bunu yapmak için nispeten kolay olmalı ama ben de grup öğeleri için bir sayım gerekir.

Herkes bunu etkili bir yolu var mı? Ben hızlı ve ölçeklenebilir olması gerekir bu nedenle bu her sayfa yük olur.

Ben prehaps Lucene veya sqlite gibi bir şey içine sonuçları dökümü olabilir sonra her sayfa yük o belge üzerinde bir sorgu çalıştırmak?

Herhangi bir düşünce büyük mutluluk duyacağız.

4 Cevap

Sadece dizi üzerinden yineleme ve gruplar için başka bir dizi kullanın. Yeterince hızlı olması ve SQLite veya benzeri kullanırken dahil yükü muhtemelen daha hızlıdır gerekir.

$groups = array();
foreach ($data as $item) {
    $key = $item['key_to_group'];
    if (!isset($groups[$key])) {
        $groups[$key] = array(
            'items' => array($item),
            'count' => 1,
        );
    } else {
        $groups[$key]['items'][] = $item;
        $groups[$key]['count'] += 1;
    }
}

Burada hızlı bir örnek:

$a = array(1, 2, 3, 1, 2, 3, 3, 2, 3, 2, 3, 4, 4, 1);
$n = array_count_values($a);
arsort($n);

print_r ($ n);

Array ( [3] => 5 [2] => 4 [1] => 3 [4] => 2 )

$aA = array_count_values(array(1,2,3,4,5,1,2,3,4,5,6,1,1,1,2,2));
$aB = array();
foreach($aA as $index=>$aux){
     array_push($aB,$index);
}
print_r($aB);

Sonuç:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
"$Switches" Array with [3] elements
0       
    SwitchID    1   
    name    k�  
    type    output  
    displayAs   button  
    value   on  
    groupname   group1  
1   Array [6]   
2   Array [6]   


// this will sort after groupname

$result = array();
$target = count($Switches);
for($i=0;$i<$target;$i++)
{
    $groupname = $Switches[$i]["groupname"];

    $result[$groupname][] = $Switches[$i];
}

// count amount of groups
$groupCount = count($result);

... Ya da ben bir şey mi kaçırdım?