Bir dizide bir ortadan yinelenen ilişkisel değerleri sayma

1 Cevap

Ben sorunu şu, ben isim $ veri ile bir dizi var var

Bu dizinin içinde ben gibi bir şey var

[6] => Array
        (
            [code] => 642
            [total] => 1708
        )

    [7] => Array
        (
            [code] => 642
            [total] => 53
        )

    [8] => Array
        (
            [code] => 642
            [total] => 1421
        )

Bazı elemanları kod değeri şimdi ne yapmak istediğinizi birlikte aynı kod değeri ile tüm unsurları birleştirme ve birlikte toplamları ekleme olduğunu aynıdır. Bir foreach döngüsü yapıyor çalıştı, ancak çalışmak için görünmüyor.

Ben böyle bir şey yapmak

$old_lc = null;
        $old_lcv = 0;
        $count = 0;
        $dd = null;


        foreach($data as $d){

            if($d['code'] == $old_lc){
                $d['total'] = $d['total'] + $old_lcv;
                $count--;
                $dd[$count]['code'] = $d['code'];
                $dd[$count]['total'] = $d['total'];

            }else{
                $dd[$count]['code'] = $d['code'];
                $dd[$count]['total'] = $d['total'];
                $count++;

            }

            $old_lc = $d['code'];
            $old_lcv = $d['total'];
        }

        $data = $dd;

Ama bu işe görünmüyor. Ayrıca ben anahtarlarını saklamak $ veri dizisi gerekir ve aynı formatta kalmalıdır

1 Cevap

Bu kod kod => toplam bir diziye yukarıdaki dizi çevirir.

$out = array();
foreach ($data as $k => $v) {
  $out[$v['code']] += $v['total'];
}

Belirli ayarları bu tanımsız dizin hakkında bir uyarı üretecektir fazlalaştı. Bu sizi rahatsız ediyorsa, bu alternatif sürümünü kullanabilirsiniz:

$out = array();
foreach ($data as $k => $v) {
  if (array_key_exists($v['code'], $out)) {
    $out[$v['code']] += $v['total'];
  } else {
    $out[$v['code']] = $v['code'];
  }
}

Eğer istediğin buysa, bu, orijinal gibi bir şey haline geri döner:

$output = array();
foreach ($out as $code => $total) {
  $output[] = array('code' => $code, 'total' => $total);
}

Note: orijinal anahtarları $data korunur değil, bu bir gereklilik olduğunu belirtti değildi. Bu ise, aynı koda sahip birden fazla unsurları yeniden nasıl belirtilmesi gerekir.