2012-06-13 3 views
-3

У меня есть массив, как показано ниже, и я хочу сделать общее количество значений определенным образом, где все значения ADDED_NEW _ (. *) {Регулярные выражения} и аналогичные другие значения. У меня есть только специальные данные, такие как ADDED_NEW, ADDED_OLD и ADD_LATER.Суммирование значений в моем массиве

Мой массив как:

$stats = Array 
(
    [ADDED_NEW_2012_06_12] => 16 
    [ADDED_OLD_2012_06_12] => 10 
    [ADD_LATER_2012_06_12] => 12 
    [ADDED_NEW_2012_06_11] => 16 
    [ADDED_OLD_2012_06_11] => 10 
    [ADD_LATER_2012_06_11] => 12 
) 

Можете ли вы сказать мне, как я могу получить мой результат. Я не знаю, как добавить такие значения, используя regex в php. Пожалуйста помоги.

Выход я ожидаю составляет $ ADDED_NEW = 32 (т.е. 16 + 16), $ ADDED_OLD = 20 (т.е. 10 + 10) и $ ADD_LATER = 24 (т.е. 12 + 12)

+2

could'nt вполне получить это => знач1 _ {регулярные выражения} (*.)? Что ты хочешь этим сказать? – verisimilitude

+0

Какой текст вы пытаетесь найти? –

+0

вопрос отсутствует ясность. найдите время, чтобы объяснить сцену. – mithunsatheesh

ответ

0

Я считаю, что вам просто хочу добавить значения похожих ключей, в которых все они начинаются с ADDED_NEW или ADDED_OLD или ADD_LATER. Я предполагаю, что мы можем просто сделать 3 счетчика и просто сопоставить их с клавишами и добавить к счетчикам.

Я не знаю много PHP, но с помощью руководств и мои знания из Python, это то, что я набрался:

<?php 
$ADDED_NEW = 0; 
$ADDED_OLD = 0; 
$ADD_LATER = 0; 
foreach ($stats as $key => $value) { 
    if (preg_match("ADDED_NEW_.*", $key)) { $ADDED_NEW += $value; } 
    if (preg_match("ADDED_OLD_.*", $key)) { $ADDED_OLD += $value; } 
    if (preg_match("ADD_LATER_.*", $key)) { $ADD_LATER += $value; } 
} 
?> 
+0

ошибка отображается на ADDED_NEW = 0; ADDED_OLD = 0; ADD_LATER = 0; и в случае, если условия тоже – Thompson

+0

LOL Извините, забыли знаки $;) (я предупреждал вас, что я мало знаю PHP XD) – richardhsu

+0

, но они не являются переменными. они находятся в массиве – Thompson

0

проверить это.

<?php 



    $stats = array(
    'ADDED_NEW_2012_06_12' => 16, 
    'ADDED_OLD_2012_06_12' => 10, 
    'ADD_LATER_2012_06_12' => 12, 
    'ADDED_NEW_2012_06_11' => 16, 
    'ADDED_OLD_2012_06_11' => 10, 
    'ADD_LATER_2012_06_11' => 12 
); 
    $ADDED_NEW = 0; 
    $ADDED_OLD = 0; 
    $ADD_LATER = 0; 
    foreach ($stats as $key => $value) { 
     if (preg_match("/ADDED_NEW_.*/", $key)) { $ADDED_NEW += $value; } 
     else if (preg_match("/ADDED_OLD_.*/", $key)) { $ADDED_OLD += $value; } 
     else if (preg_match("/ADD_LATER_.*/", $key)) { $ADD_LATER += $value; } 
    } 

echo "$ADDED_NEW - $ADDED_OLD - $ADD_LATER"; 

?> 

выходы: 32 - 20 - 24

+0

Спасибо, что это сработало. – Thompson

0

Попробуйте это:

<?php 

$stats = array 
(
    "ADDED_NEW_2012_06_12" => 16, 
    "ADDED_OLD_2012_06_12" => 10, 
    "ADD_LATER_2012_06_12" => 12, 
    "ADDED_NEW_2012_06_11" => 16, 
    "ADDED_OLD_2012_06_11" => 10, 
    "ADD_LATER_2012_06_11" => 12, 
); 

$accumulators = array 
(
    "ADDED_NEW" => 0, 
    "ADDED_OLD" => 0, 
    "ADD_LATER" => 0, 
); 

foreach($stats as $key => $value) 
{ 
    foreach(array_keys($accumulators) as $accumulator) 
    { 
     if(preg_match("@^${accumulator}@m", $key)){$accumulators[$accumulator] += $value;} 
    } 
} 

header('Content-Type: text/plain'); 
print_r($accumulators); 

?> 
Смежные вопросы