Array-Problem, Index-Überschreitung

Hallo,

Ich habe Probleme, mein Vorhaben umzusetzen.
Es soll überprüft werden, von wievielen Arraystellen bzw. Index ich die Summe bilden kann, bis ich die $max erreicht habe.

Lässt es etwas schwer beschreiben, daher habe ich weiter unten etwas ausführlicher beschrieben.

Würde mich über ein paar Tips freuen :)

Gruß
Angelika

Code:
<?php

$max  = 230;
$list = array (122, 34, 103, 49, 168, 2, 69);


/*
Folgendes soll hier überprüft werden:

Ist $list[0] kleiner als $max -> ja 
Daher soll überprüft werden, ob $list[0]+$list[0+1] auch noch kleiner ist als $max -> ja
Daher soll überprüft werden, ob $list[0]+$list[0+1]+$list[0+1] auch noch kleiner ist als $max -> NEIN
Index 0 und Index 1 werden ausgegeben.
Da index 0 und index 1 bereits ausgegeben wurden, wird der counter $i um 2 erhöht.

Das gleiche Pronzip wird ab index[2] = 103 ausgeführt.
*/

for ($i=0; $i<sizeof($list); $i++) {

	if($list[$i]<$max) {
		if($list[$i+1]<$max) {
			if($list[$i+2]<$max) {
				//Problem:  array Überschreitung !!
			}
		}
	}
}

?>
 
Du machst es dir ein bisschen zu kompliziert.
PHP:
<?php

	$max  = 230;
	$list = array (122, 34, 103, 49, 168, 2, 69);

	for( $i=1,$tmp=0; $i<count($list); $i++ ) {
		$tmp += $list[$i-1];
		if( $tmp >= $max ) {
			break;
		}
	}

	echo 'Die ersten '.$i.' Array-Elemente werden benötigt, um den Wert '.$max.' zu erreichen/zu überschreiten.';

?>
 
Danke Gumbo :)
Jetzt bin ich ein Schritt weiter. Leider mache ich immer noch etwas falsch.

Wenn die Summer der ersten Beidern Zahlen das Maximum überschreiten, sollen die ersten beiden Zahlen ausgegeben werden und die nächsten Zahlen überprüft werden.

Gruß
Angelika

Code:
     $max  = 230;
    $list = array (200, 122, 34, 200, 49, 56);

	for($i=0, $jump=0, $sum=0, $control=true; $i<sizeof($list); $i++) {
		$sum += $list[$i];	
		if($sum > $max) {
		
			// Falls der erste Index größer als $max ist.
			if($jump==0) {
				$i++;
			}
			
			if($jump <= sizeof($list)) {
				$i=$jump;
			}
			
			$jump = 0;
			$sum  = 0;
			$control = false;
		}
		if($control) {
			$jump++;
		}		
		$control = true;
		
		echo $jump."<br />";
	}
 
Zuletzt bearbeitet:
Hi,
probier es mal so:
PHP:
<?php
$max  = 230;
$list = array (122, 160, 200, 49,  34, 156);
$anzahl = count($list)-1;
for($i = 0; $i <= $anzahl; $i++)
{
    if($list[$i] + $list[$i+1] < $max)
    {
        echo "Die Zahlen " . $list[$i] . " und " . $list[$i+1] . " sind kleiner als " . $max . "\n";
        echo "<br>\n";
    }
    else
    {
        echo "Die Zahlen " . $list[$i] . " und " . $list[$i+1] . "sind gr&ouml;ßer als " . $max . "\n";
        echo "<br>\n";
    }
}
?>
Gruß,
Snowowl
 
@Snowowl: sorry aber das Ganze sollte dynamisch sein.

$list = array (2, 34, 21, 1, 21, 5);

Alles Stellen zusammen sind kleiner als 200.

Gruß
Angelika (ist so langsam verzweifeln)
 
Hallo Angelika,
also so ganz habe ich das ja nicht verstanden was Du da machen willst aber hilft das?

Code:
<?php

$max  = 230;
$list = array (122, 34, 103, 49, 168, 2, 69);

$sum = 0;
foreach ($list as $key => $value)
{
    if ($sum > $max)
        break;

    $sum += $value;
}

echo "Die ersten " . ($key + 1) . " Elemente sind kleiner als " . $max;

?>

Marco
 
Zuletzt bearbeitet:
Zurück