PHP - Bir anahtar ile çok boyutlu bir dizi ile TOPLAYIN ve GROUP nasıl?

1 Cevap php

Ben çok boyutlu bir dizi var ve bir anahtar bir değerle gruplandırmak çalışıyorum.

Bu yüzden

 Array (
[0] => Array  (
        [name] => Edward Foo
        [desc_topic] => Array (
                         [0] => Apple
                         [1] => Banana
                         [2] => Orange
                        )            
        [qtd_posts] => Array  (
                         [0] => 10
                         [1] => 20
                         [2] => 50
                        )

    )


[1] => Array  (
        [name] => Michael Max
        [desc_topic] => Array (
                         [0] => Apple
                         [1] => Banana
                         [2] => Orange
                        )  
        [qtd_posts] => Array  (
                         [0] => 10
                         [1] => 10
                         [2] => 10
                        )
    )

[2] => Array  (
        [name] => Edward Foo
        [desc_topic] => Array (
                         [0] => Apple
                         [1] => Banana
                         [2] => Orange
                        )            
        [qtd_posts] => Array  (
                         [0] => 5
                         [1] => 10
                         [2] => 30
                        )

    )

[3] => Array  (
        [name] => Michael Max
        [desc_topic] => Array (
                         [0] => Apple
                         [1] => Banana
                         [2] => Orange
                        )             
        [qtd_posts] => Array  (
                         [0] => 8
                         [1] => 8
                         [2] => 20
                        )

    )            

Ve ben gerçekten ihtiyacım var:

Array (
[0] => Array  (
        [name] => Edward Foo
        [desc_topic] => Array (
                         [0] => Apple
                         [1] => Banana
                         [2] => Orange
                        )            
        [qtd_posts] => Array  (
                         [0] => 15
                         [1] => 30
                         [2] => 80
                        )

    )

[1] => Array  (
        [name] => Michael Max
        [desc_topic] => Array (
                         [0] => Apple
                         [1] => Banana
                         [2] => Orange
                        )  
        [qtd_posts] => Array  (
                         [0] => 18
                         [1] => 18
                         [2] => 30
                        )

           )

  )

Teşekkürler!

1 Cevap

Ben şu varsayarak kulüpler:

  1. Orijinal dizideki her isim girdi özdeş bir desc_topic alt dizi (örneğin hepsi her örneği için aynı Apple / Banana / Turuncu değerleri vardır.
  2. qtd_posts alt dizisi aynı ilgili yuvalara için-toplanabilir değerleri (örneğin tüm '1, vb girdileri toplanır 'girişleri tüm '2, toplanır edilecek' ..) vardır
  3. Hepiniz 'Edward Foo' girişleri (örneğin 0) Edward Foo girişi tarafından kullanılan ilk anahtarı kullanacak böylece ebeveyn dizi anahtarları korumak istiyor

Bu uygulanıyorsa, o zaman böyle bir şey çalışması gerekir:

$newarr = array();
$reverse_map = array();

foreach($array as $idx => $entry) {
    if (isset($reverse_map[$entry['name']]) {
         // have we seen this name before? retrieve its original index value
         $idx = $reverse_map[$entry['name']]; 
    } else {
         // nope, new name, so store its index value
         $reverse_map[$entry['name']] = $idx;
    }

    // copy the 'constant' values
    $newarr[$idx]['name'] = $entry['name'];
    $newarr[$idx]['desc_top'] = $entry['desc_topic'];

    // sum the qtd_post values to whatever we previously stored.        
    foreach($entry['qtd_posts'] as $x => $y) {
        $newarr[$idx]['qtd_posts'][$x] += $y;
    }
}