2016-11-22 3 views
0

У меня есть массив значений, и мне нужно их подсчитать, но только до тех пор, пока не достигнет суммы $ target. Мне нужно знать, сколько ключей массива требуется для достижения цели ($ count) и суммы этих соответствующих значений ($ total). Вот массив Я использую:php - Как подсчитать значения массива и ключи до достижения цели

$numbers = Array ([0] => 1 [1] => 1 [2] => 1 [3] => 1 [4] => 6 [5] => 1 [6] => 5.5 [7] => 1 [8] => 1 [9] => 1 [10] => 1 [11] => 1 [12] => 1 [13] => 11) 

С $target=9 в $total должно быть 10 и $ Количество должно быть 5, но я получаю $total=9 и $count=9 как код, кажется, считать ключи, а не значений , Аналогично, если целью было 12, то $total должно быть 16,5, а $count должно быть 7, но я получаю 12 и 12.

Надеюсь, что все это имеет смысл. Если кто-то может отредактировать этот код, чтобы он работал для любого массива чисел и любой цели, он был бы весьма признателен.

$count=0; 
$target=9; 
$total=0; 
foreach($numbers as $key => $value){ 
while($total < $target) { 
$total = $total+$value; 
$count++; 
} 
} 
echo "total is $total and count is $count"; 
+0

Что такое '$ outgoing'? Почему у вас есть 'while' внутри вашего' foreach'? –

+0

Возможно, вы хотите использовать '$ target' вместо' $ outgoing' –

+0

отредактировал ошибку, чтобы сказать $ target, а не $ outgoing – user1961653

ответ

-1

Добавить, если заявление

$total = 0; 
foreach($numbers as $key => $value) 
{ 
    $total = $total+$value; 
    if($total >= $target) 
    { 
     $count = $key+1; 
     break; 
    } 
} 

И вам не нужно while цикл.

+1

Вам нужно увеличить '$ total' где-то, или он останется на 0. –

+1

Точное совпадение нет good и $ total нужно увеличить – user1961653

+0

да, это был пример только оператора if, но это точка, я добавлю это в код – Syeth

0

Rename $ исходящее до $ цели, и изменения в то время как в случае

$count=0; 
$target=9; 
$total=0; 
foreach($numbers as $key => $value){ 
    if($total < $target) { 
     $total = $total+$value; 
     $count++; 
    } 
    else 
    { 
     break; 
    } 
} 
echo "total is $total and count is $count"; 

UPD: Переписана код, чтобы избежать неиспользуемых записей цикла с перерывом

+0

, спасибо «if» works – user1961653

+0

Также хочу упомянуть, что в этом случае решением будет массив ключевой независимый до тех пор, пока значения массива являются номерами – GodlyHedgehog

+0

обновленный ответ. – GodlyHedgehog

2
$target = 9; 
$total = 0; 

foreach($numbers as $key => $value) { 
    if ($total >= $target) { 
     break; 
    } 

    $total += $value; 
} 

echo "total is $total and count is $key"; 
+0

спасибо «если» работает – user1961653

+0

Может захотеть добавить какое-то объяснение или какой-то текст. – AbraCadaver

0

Вы можете поставить чек вам $key если ключ равна и больше, чем $target break foreach loop. Что-то вроде этого -

<?php 

$numbers = Array (0 => 1, 1 => 1, 2 => 1, 3 => 1, 4 => 6, 5 => 1, 6 => 5.5, 7 => 1, 8 => 1, 9 => 1, 10 => 1, 11 => 1, 12 => 1, 13 => 11); 

$count=0; 
$target=9; 
$total=0; 

foreach($numbers as $key => $value) { 
    if ($key >= $target) { 
    break; 
    } 
    $total += $value; 
    $count++; 
} 

echo "total is $total and count is $count"; 
?> 

Надеюсь, этот результат в том, что вы на самом деле хотели. (У).

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