PHP - цикл - PullRequest
       35

PHP - цикл

4 голосов
/ 17 марта 2010
print "<ul>";
foreach ($arr as $value) {
    echo("<li>" . $value[storeid] . " " . ($value[dvdstock] + $value[vhsstock]) . "</li>");
}
print "</ul>";

Будет выводить

•2 20
•2 10
•1 20
•1 20
•1 10

Мне было интересно, как бы я адаптировал этот цикл, чтобы он выводил общие значения для каждого & value [storeid]

•1 50
•2 30

Большое спасибо:)

Ответы [ 5 ]

1 голос
/ 17 марта 2010

Используйте другой массив для вычисления желаемых значений:

// setup a quick place to store the data
$stores = array();
foreach ($arr as $value) {
    if(!isset($stores[$value['storeid']])){  // init check required to avoid Notices
        $stores[$value['storeid']] = $value['dvdstock'] + $value['vhsstock'];
    }else{
        $stores[$value['storeid']] += $value['dvdstock'] + $value['vhsstock'];
    }
}
ksort($stores);  // sort by storeid ASC

print "<ul>";
// loop through the new data
foreach ($stores as $id => $value) {
    echo("<li>" . $id . " " . ($value) . "</li>");
}
print "</ul>";

Демо-ссылка

1 голос
/ 17 марта 2010

Если вы получаете данные из базы данных SQL, вы должны сделать это, используя функции SUM() в SQL, поскольку это более эффективно. Если источник данных откуда-то еще, вы должны сделать что-то вроде этого:

//Sum data
foreach ($arr as $value) {
    if (!isset($sums[$value['storeid']])) {  // init check required to avoid Notices
        $sums[$value['storeid']] = $value['dvdstock'] + $value['vhsstock'];
    } else {
        $sums[$value['storeid']] += $value['dvdstock'] + $value['vhsstock'];
    }
}
ksort($sums);  // sort by storeid ASC

print "<ul>";
foreach ($sums as $key => $sum) {
    echo("<li>$key $sum</li>");
}
print "</ul>";

Демо-ссылка

0 голосов
/ 17 марта 2010

Это цикл for, и вам нужно сделать два из них. Сначала вычислить сумму, а затем выполнить итерации по этим значениям:

$data = array();

foreach ($arr as $value) {
    if (!isset($data[$value['storeid']])) {  // init check required to avoid Notices
        $data[$value['storeid']] = $value['dvdstock'] + $value['vhsstock'];
    } else {
        $data[$value['storeid']] += $value['dvdstock'] + $value['vhsstock'];
    }    
}
ksort($data);  // sort by storeid ASC

print "<ul>";
foreach ($data as $storeid => $sum) {
    echo('<li>' . $storeid . ' ' . ($sum) . '</li>');
}
print "</ul>";

Демо-ссылка

Кстати, одно слово о строках:
Либо используйте одинарные кавычки ' с конкатенацией .: 'foo: ' . $bar.
Или двойные кавычки " и поместите переменные в строку: "foo: $bar".

0 голосов
/ 17 марта 2010
<?php
$sums = array();
foreach ($arr as $value)
{
    $sums[$value['storeid']] += $value['dvdstock'];
}
print_r($sums);
?>
0 голосов
/ 17 марта 2010

Правильная версия:

<?php

$initial = array (
    array (
        'id'     => 1,
        'amount' => 10
    ),
    array (
        'id'     => 1,
        'amount' => 10
    ),
    array (
        'id'     => 2,
        'amount' => 20
    ),
    array (
        'id'     => 2,
        'amount' => 20
    ),
    array (
        'id'     => 2,
        'amount' => 20
    ),
);

$result = array ();

foreach ($initial as $value) {
    $result[$value['id']] += $value['amount'];
}

print_r($result);

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...