2017-09-20 4 views
0

Ich habe dieses Problem, wo ich nicht den Wert aus dem Array in der For-Schleife abrufen kann, aber ich kann es in der While-Schleife zugreifen.PHP kann Array-Wert nicht erhalten

Ich kann nicht scheinen, eine Antwort online zu finden, so würde Hilfe sehr geschätzt werden.

while ($pos = strpos($logTxt, $char, $pos)) 
{ 
    $t++; 
    $pos += strlen($char); 
    $positions[$t] = $pos; 
} 

for($i = 0; $i < sizeof($positions); $i++) 
{ 
    $beginLine = $lastEndLine; 
    $endLine = $positions[2]; 
    $textToEcho = substr($logTxt,$beginLine,$endLine); 
    $lastEndLine = $endLine; 
} 
+1

Ist es immer '$ Positionen [2]', die Sie in der for-Schleife brauchen? So wie es aussieht, sehe ich keinen Grund für die for-Schleife überhaupt – GrumpyCrouton

Antwort

1

ich zu ändern denken, dass dies ziemlich leicht durch die Verwendung einer foreach Schleife statt einer Schleife for fixiert werden konnte, weil es ein Array ist.

foreach($positions as $position) { 
    $beginLine = $lastEndLine; 
    $endLine = $position; 
    $textToEcho = substr($logTxt,$beginLine,$endLine); 
    $lastEndLine = $endLine; 
} 

Wenn Sie noch eine for Schleife verwenden möchten, ich glaube, Ihr Problem ist, dass Sie nur referenzieren die 3. Position des Arrays (Key 2, als Arrays bei 0 beginnen), nicht das, was die Schleife zeigt . Man könnte es beheben, indem dieses Problem

for($i = 0; $i < sizeof($positions); $i++) 
{ 
    $beginLine = $lastEndLine; 
    $endLine = $positions[$i]; 
    $textToEcho = substr($logTxt,$beginLine,$endLine); 
    $lastEndLine = $endLine; 

} 
+0

'$ endLine = $ position;' plus '$ lastEndLine = $ endLine;'? – vladkras

+0

@vladkras Das ist eine Diskrepanz, die im ursprünglichen Code existiert, ich kenne die Absichten nicht. – GrumpyCrouton

+0

Danke, ich war so darauf fixiert, dass die While-Schleife funktionieren musste, dass ich stecken blieb. –

0

Ihr $endLine immer drittes Element von Array hat, wegen $positions[2]. Versuchen Sie es zu $positions[$i]

0

Sie Basis tun, ist mit konstantem Index in $positions[2]. Aber Ihre erste Zeile in for Schleife $beginLine = $lastEndLine; wird immer fehlschlagen, weil $lastEndLine noch nicht definiert ist. Sie können smth wie

       // beginLine  // endLine 
$textToEcho = substr($logTxt, $positions[$i-1], $positions[$i]); 

natürlich verwenden Sie benötigen $positions[-1] Set 0 vor der ersten Schleife oder smth wie folgt aus (es ist klar, nicht das, was vor passiert)

UPD Ich habe Ihren Code versucht und festgestellt,

  1. es überhaupt nicht funktioniert, wenn $char das erste Vorkommen ist in $logTxt
  2. tut es das fast die gleiche wie explode() Funktion
+0

Ja, ich war mir dieses Problems bewusst, aber ich musste in der Lage sein, die Variable zuerst zu bekommen, damit ich weiter gehen konnte. –

+0

Setzen Sie also '$ beginLine' in der ersten Schleife auf Null, nicht auf undefinierte Variable – vladkras