2016-06-20 1 views
0

Я создаю массив многомерных данных из данных, имеющих несколько записей, но некоторые записи имеют одинаковое значение;Множество одинаковых значений в массиве и использование за пределами

id  name  delivery# weight time 
-------------------------------------------- 
12  test  112233  45  now 
13  test  112234  456  now 
14  testA  112245  33  later 
15  testB  334421  334  later 
... 
... 

и foreach id Я толкаю массив таким образом;

array_push($arraydata, array(
"id" => $id, 
"name" => $name, 
"delivery" => $delivery, 
"weight" => $weight, 
"time" => $time 
)); 

и более поздние версии я использую для его прохождения;

foreach($arraydata as $arraydataItem) { 

//do stuff... 
//test appears twice - echo count & delivery values 
//testA once - echo count 
//testB once - echo count 

} 

В принципе, я хочу проверить, сколько раз появляется одно и то же имя, и суммировать значения веса вместе.

Как и для каждой «доставки» с тем же «именем», разделите вес доставки на общий вес «имя» и получите процент, который я буду использовать для расчета процента от общей стоимости «имени». .

+0

Попробуйте использовать ключ => значение в цикле Еогеасп 'Foreach ($ ArrayData как $ к => $ v) {' –

+1

Где ваш SQL-запрос? Также опубликуйте соответствующий PHP-код. –

+0

На самом деле я читаю каждую строку из таблицы Excel ... и массив отображается правильно, просто нужно сделать то, что было задано. – BENN1TH

ответ

2

Вместо создания , что ассоциативный массив с помощью array_push(), вы должны создать многомерный массив, как это,

$arraydata[$name][] = array('id' => $id, 'delivery' => $delivery, 'weight' => $weight, 'time' => $time); 

И как по вашему вопросу,

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

Просто используйте foreach цикл для перебора $arraydata массива и количества отображения и общего веса, связанного для каждого имени, например:

foreach($arraydata as $key => $arraydataItem){ 
    // Display count and total weight associated for each name 
    echo $key . ": (count: " . count($arraydataItem) . ", total weight: " . array_sum(array_column($arraydataItem,'weight')) . ")<br />"; 
} 

Это выведет:

test: (count: 2, total weight: 501) 
testA: (count: 1, total weight: 33) 
testB: (count: 1, total weight: 334) 

Кроме того, вы можете настроить этот код, чтобы выполнить ваши дальнейшие требования.


Примечание: Если вы хотите увидеть структуру $arraydata массива, сделать var_dump($arraydata);

+0

Работайте по назначению +1, однако я использовал другое решение для достижения моего общего результата. Благодарю. – BENN1TH

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