Pregunta

Si tengo una matriz multidimensional en PHP como ...

    [0] => Array
    (
        [url] => http://domain1.com
        [domain] => domain1.com
        [values] => Array
            (
                [character_length] => 25
                [word_count] => 7
            )

    )

    [1] => Array
    (
        [url] => http://domain2.com
        [domain] => domain2.com
        [values] => Array
            (
                [character_length] => 30
                [word_count] => 7

    )

¿Cómo puedo combinarlos para producir ...

    [0] => Array
    (
        [url] => *can be anything*
        [domain] => *can be anything*
        [values] => Array
            (
                [character_length] => 55
                [word_count] => 14
            )

    )
¿Fue útil?

Solución

Simplemente haga un foreach en todos los elementos y sume los valores:

$values = array(
    'character_length' => 0,
    'word_count'       => 0
);
foreach ($array as $item) {
    $values['character_length'] += $item['values']['character_length'];
    $values['word_count']       += $item['values']['word_count'];
}

Otros consejos

No creo que haya ninguna función incorporada que te permita sumar los valores de una matriz multidimensional. Sin embargo, aquí hay una forma de hacerlo utilizando una función de estilo lambda.

Supongamos que esta es tu matriz:

 [items] => Array
        (
            [0] => Array
                (
                    [ID] => 11
                    [barcode] => 234334
                    [manufacturer] => Dell
                    [model] => D630
                    [serial] => 324233
                    [current_value] => 1100.00
                )

            [1] => Array
                (
                    [ID] => 22
                    [barcode] => 323552
                    [manufacturer] => Dell
                    [model] => D630
                    [serial] => 234322
                    [current_value] => 1500.00
                )

        )

Podría crear una función a la que podría pasarle valores:

$array_value_sum = create_function('$array,$key', '$total = 0; foreach($array as $row) $total = $total + $row[$key]; return $total;');

Y luego úsalo así:

echo "Total Current Value" . $array_value_sum($obj['items'], 'current_value');

Puede hacer esto utilizando array_sum () y array_map () función como la siguiente:

$totalCharacterLength = array_sum(array_map(function($item) { 
    return $item['values']['character_length']; 
}, $totalCharacterLength));

$totalWordCount = array_sum(array_map(function($item) { 
    return $item['values']['word_count']; 
}, $totalWordCount));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top