2

私はこのことをする必要があります:私は以下のようなオブジェクトを持っていますが、object1_(anything)、object2_(anything)のようなオブジェクトの数の合計を行う必要があります

stdClass Object
(
    [object1_2012_06_12] => 16
    [object2_2012_06_12] => 10
    [object1_2012_06_11] => 16
    [object2_2012_06_11] => 10
)

たとえば、object1_(anythingの合計は(object1_2012_06_12 + object1_2012_06_11)=(16 + 16)=32になります。

4

3 に答える 3

8

オブジェクトを配列にキャストできます。

$sum = 0;
foreach ((array)$myobj as $v) {
  $sum += intval($v);
}

または@MarkBakerによって提案されたように:

$sum = array_sum((array)$myobj);
于 2012-06-12T12:52:33.480 に答える
0

オブジェクトの属性を確認し、次を使用して最初にアンダースコアを付ける前に、部分に基づいて合計しますstrtok

$sums = array();
foreach ($my_object as $key => $value) {
    $key = strtok($key, '_');

    if (!isset($sums[$key])) {
            $sums[$key] = $value;
    } else {
            $sums[$key] += $value;
    }
}

print_r($sums);

または:

function sum_of_object_starting_with($my_object, $starts_with)
{
    $sum = 0; $prefix_len = strlen($starts_with);
    foreach ($my_object as $key => $value) {
        if (strncmp($key, $starts_with, $prefix_len)) {
            $sum += $value;
        }
    }
    return $sum;
}

print_r(sum_of_object_starting_with($my_object, 'object1_'));
于 2012-06-12T13:05:27.907 に答える
0

このコードは、必要な値を取得します。

function sum_by_object_name ($data, $objName) {

  // Temporary array to hold values for a object name
  $objValues = array();

  // Convert input object to array and iterate over it
  foreach ((array) $data as $key => $val) {

    // Extract the object name portion of the key
    $keyName = implode('_', array_slice(explode('_', $key), 0, -3));

    // If object name is correct push this value onto the temp array
    if ($keyName == $objName) {
      $objValues[] = $val;
    }

  }

  // Return the sum of the temp array
  return array_sum($objValues);

}

// Calculate the total of $object
$total = sum_by_object_name($object, 'object1');

それが機能しているのを見る

于 2012-06-12T13:12:21.927 に答える