2017-02-22 46 views
1

Я хочу добавить массив, в котором значения ключа совпадают, но только один ключ.Добавление массива с таким же значением ключа

Например, у меня есть массив, который печатает следующее:

Array 
(
[0] => Array 
    (
     [Booked Date] => 2017-02-12 
     [salesMadeToday] => 128327.34 
    ) 

[1] => Array 
    (
     [Booked Date] => 2017-02-13 
     [salesMadeToday] => 162808.03 
    ) 

[2] => Array 
    (
     [Booked Date] => 2017-02-14 
     [salesMadeToday] => 84753.11 
    ) 

[3] => Array 
    (
     [Booked Date] => 2017-02-15 
     [salesMadeToday] => 164110.29 
    ) 

[4] => Array 
    (
     [Booked Date] => 2017-02-16 
     [salesMadeToday] => 106904.50 
    ) 

[5] => Array 
    (
     [Booked Date] => 2017-02-17 
     [salesMadeToday] => 140185.52 
    ) 

[6] => Array 
    (
     [Booked Date] => 2017-02-18 
     [salesMadeToday] => 58404.60 
    ) 

[7] => Array 
    (
     [Booked Date] => 2017-02-12 
     [salesMadeToday] => 21979.00 
    ) 

[8] => Array 
    (
     [Booked Date] => 2017-02-13 
     [salesMadeToday] => 6512.00 
    ) 

[9] => Array 
    (
     [Booked Date] => 2017-02-14 
     [salesMadeToday] => 4534.00 
    ) 

[10] => Array 
    (
     [Booked Date] => 2017-02-17 
     [salesMadeToday] => 14332.02 
    ) 

[11] => Array 
    (
     [Booked Date] => 2017-02-18 
     [salesMadeToday] => 4904.00 
    ) 

) 

Теперь, как вы можете увидеть некоторые даты совпадают.

Как я могу сделать это так, чтобы объединить ключи и добавить значения salesMadeToday?

Массив называется:

$ liveForecastSales и это было создано путем добавления 2 других массивов, используя функцию array_merge_recursive().

Оригинальные массивы разрабатываются путем вызова из других функций, которые вытаскивают данные из базы данных, поэтому было слишком много кода для вставки здесь, но если вам нужна какая-либо другая информация, спросите пожалуйста.

Спасибо

+0

хороший теоретический вопрос –

+0

неясно, вы хотите суммировать значения 'salesMadeToday' в записях с той же« Booked Date »? – RomanPerekhrest

+0

Да, я хочу подвести эти значения @RomanPerekhrest – Andrew

ответ

0

Решение с помощью обычного foreach цикла и array_values функции:

$result = []; 
foreach ($liveForecastSales as $item) { 
    if (!isset($result[$item['Booked Date']])) { 
     $result[$item['Booked Date']] = $item; 
    } else { 
     $result[$item['Booked Date']]['salesMadeToday'] += $item['salesMadeToday']; 
    } 
} 

print_r(array_values($result)); 

DEMO link

0

Привет trye этой простой comparasion:

$arr = Array 
(
[0] => Array 
    (
     [Booked Date] => 2017-02-12 
     [salesMadeToday] => 128327.34 
    ) 

[1] => Array 
    (
     [Booked Date] => 2017-02-13 
     [salesMadeToday] => 162808.03 
    ) 

[2] => Array 
    (
     [Booked Date] => 2017-02-14 
     [salesMadeToday] => 84753.11 
    ) 

[3] => Array 
    (
     [Booked Date] => 2017-02-15 
     [salesMadeToday] => 164110.29 
    ) 

[4] => Array 
    (
     [Booked Date] => 2017-02-16 
     [salesMadeToday] => 106904.50 
    ) 

[5] => Array 
    (
     [Booked Date] => 2017-02-17 
     [salesMadeToday] => 140185.52 
    ) 

[6] => Array 
    (
     [Booked Date] => 2017-02-18 
     [salesMadeToday] => 58404.60 
    ) 

[7] => Array 
    (
     [Booked Date] => 2017-02-12 
     [salesMadeToday] => 21979.00 
    ) 

[8] => Array 
    (
     [Booked Date] => 2017-02-13 
     [salesMadeToday] => 6512.00 
    ) 

[9] => Array 
    (
     [Booked Date] => 2017-02-14 
     [salesMadeToday] => 4534.00 
    ) 

[10] => Array 
    (
     [Booked Date] => 2017-02-17 
     [salesMadeToday] => 14332.02 
    ) 

[11] => Array 
    (
     [Booked Date] => 2017-02-18 
     [salesMadeToday] => 4904.00 
    ) 

); 
function exists($date){ 
    for($i=0; $i<count($arr);$i++){ 

    if($arr[$i]['Booked Date']==$date){ 
     return true; 
    } 
    return false; 
} 
for($i=0; $i<count($arr);$i++){ 
    if(!exists($arr[$i]['Booked Date'])){ 
     $new[]=$arr[$i]; 
    } 

} 
+1

я получаю: Примечание: Undefined переменной: обр Это, как я объявил $ обр $ обр = массив(); и $ arr: $ arr = array_merge_recursive ($ liveForecastSales, $ fullCanxForecastSales); , который распечатывает исходный массив? Также отсутствовал}, поэтому я предполагаю, что это закрывает функцию, а затем запускает цикл for? Спасибо @ Álvaro Touzón – Andrew

+0

ok, array_merge_recursive, выглядит лучше –