سؤال

ولدي لتلخيص بعض صفائف (مجموعة من المصفوفات). هيكل صفائف بلدي هو من هذا القبيل:

Array([id]=>some_id, [name]=>some_name, [value]=>float_value)

وأنا أعرف أن لدي صفائف N بوصفها واحدة من قبل. ولست بحاجة لجمع تلك بالمعرف نفسه.

وأي فكرة؟

وعلى سبيل المثال:
**

Array
(
    [id] => 1
    [name] => John00
    [value] => 0.9
)
Array
(
    [id] => 2
    [name] => Ann01
    [value] => 0.011
)
Array
(
    [id] => 3
    [name] => Ann
    [value] => 0.1
)

**

هل كانت مفيدة؟

المحلول

ولست متأكدا تماما ما تحاول القيام به - أفترض أنك تريد مجموع تجميعها بواسطة معرف لكل هوية متميزة، ولكن قد أكون مخطئا

.
<?php
//result array of sums
$sums = array();

//example data
$source = array(
    array('id'=>3, 'name'=>'some_name6', 'value'=>1.6),
    array('id'=>1, 'name'=>'some_name', 'value'=>1.4),
    array('id'=>1, 'name'=>'some_name2', 'value'=>7.2),
    array('id'=>2, 'name'=>'some_name3', 'value'=>4.4),
    array('id'=>1, 'name'=>'some_name4', 'value'=>1.2),
    array('id'=>2, 'name'=>'some_name5', 'value'=>1.4),
);

foreach ($source as $ar) {
    //create an entry for this id in the array of sums if does not exist.
    if (!isset($sums[ $ar['id'] ])) {
        $sums[ $ar['id'] ] = 0;
    }

    //add 'value' key to sum for that id
    $sums[ $ar['id'] ] += $ar['value'];
}

//sort by id
ksort($sums);

print_r($sums);

/* output:
Array
(
    [1] => 9.8
    [2] => 5.8
    [3] => 1.6
)
*/

نصائح أخرى

وهذا يبدو وكأنه انها قادمة من قاعدة بيانات، والاستعلام هو أفضل مكان للقيام مثل هذه الأمور. (إذا لم يكن هذا البيانات من ديسيبل، فقط تجاهل هذه الإجابة).

SELECT id, SUM(value)
FROM YourTable
-- add your WHERE-constraints here
GROUP BY id;

والزائفة رمز:

$totals = array();

function add($in)
{
   global $totals;
   if(!isset($totals($in['id']))
   {
      $totals[$in['id']] = $in['value'];
   }else
   {
      $totals[$in['id']] += $in['value'];
   }
}

array_walk('add',$input_array);

var_dump($totals);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top