2016-12-10 2 views
-1

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

<?php 
    $year = array (
    "Year 2015 " => array( 
     "Televizor " => "3", 
     "Lavatrice"  => "4", 
     "Kompjuter"  => "5", 
     "printer"  => "5", 
    ), 
    "Year 2016 " => array( 
     "Televizor " => "3", 
     "lavatrice"  => "7", 
     "kompjuter"  => "4", 
     "printer"  => "1", 
    ) 
    ); 

    foreach($year as $key => $product){ 
     echo "<br>"; 
     echo "$key"; 
     echo"<table border=1 cellspacing=0> 
      <tr> 
      <td>Produkti</td> 
      <td>Sasia</td> 
      </tr>"; 
     echo "<br>"; 

     foreach($product as $key => $value){ 
      echo "<tr> 
       <td>$key</td> 
       <td>$value</td> 
       </tr>"; 
     } 

     echo "</table>"; 
    } 

    foreach($year as $key => $product){ 
     echo"$key"; 

     $arrayOfValues=array_values($product); 
     $arraySum=array_sum($arrayOfValues); 

     $avg=$arraySum/count($arrayOfValues); 
     echo "Average=$avg"; 
     echo " "; 

     $maxValueArray=array(); 
     array_push($maxValueArray, $arraySum); 
     echo "Sum=$maxValueArray[0]"; 
     echo "<br>"; 
    } 
?> 

и это выход:

Year 2015 
Produkti Sasia 
Televizor 3 
Lavatrice 4 
Kompjuter 5 
printer 5 

Year 2016 
Produkti Sasia 
Televizor 3 
lavatrice 7 
kompjuter 4 
printer 1 
Year 2015 Average=4.25 Sum=17 
year 2016 Average=3.75 Sum=15 

я хотел бы напечатать «Год 2015 имеет самую большую сумму = 17»

+2

Это типично задача. Храните сумму в переменной и сравнивайте с ней новую сумму. Если новая сумма больше - замените значение переменной. –

ответ

0

Чтобы сделать это, нужно просто создать массив с оценкой.

$yearSumValues = array_map('array_sum', $year); 

$max = max($yearSumValues); 
$maxYearKey = array_search($max, $yearSumValues); 

echo 'Max sum is: ', $max, '<br />'; 
echo 'Data key is: ', $maxYearKey, '<br />'; 

if(!is_null($maxYearKey)) { 
    echo 'Values are: ', var_dump($year[$maxYearKey]); 
} 

Итак, теперь, в $max вы будете иметь самое большое значение. Итак, $maxYearKey содержит ключ самого большого года (будьте осторожны с равенствами).

var_dump($year[$maxYearKey]); 

    Produkti Sasia 
    Televizor 3 
    Lavatrice 4 
    Kompjuter 5 
    printer 5 

Компактная версия

$yearSumValues = array_map('array_sum', $year); 
if(($maxYearKey = array_search(max($yearSumValues), $yearSumValues)) != null) { 
    echo 'found ', $maxYearKey, ' with values ', var_dump($year[$maxYearKey]); 
} 

Вы можете играть: http://phplab.io/lab/IgJkR

+0

это показывает мне Примечание: Неопределенное смещение: 0 в строке var_dump ($ year [$ maxYearKey]); – deana

+0

Я добавил несколько комментариев + http://phplab.io/lab/IgJkR –

0

Краткое решение с использованием array_reduce, array_sum и array_search функции:

$result = array_reduce($year, function ($prev, $item) { 
    return (array_sum($prev) > array_sum($item))? $prev : $item; 
}, []); 

print_r(array_search($result, $year) ." has the biggest sum = ". array_sum($result)); 

Выход:

Year 2015 has the biggest sum = 17 

http://php.net/manual/en/function.array-reduce.php

+0

Я только начал работать в php, и я был бы очень признателен, если бы вы могли помочь мне найти общие ключи между 2015 и 2016 годами и какой ключ самая большая сумма? – deana

+0

уточните свой вопрос, что означают «общие ключи»? и что означает «какой ключ имеет наибольшую сумму»? – RomanPerekhrest

+0

@RomanPerekherest Я нашел решение, в любом случае спасибо. – deana

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