2016-09-06 21 views
-1

最初の値(最初の文字と最後の文字)が 'ae'と一致する場合、配列から最初の値を削除しようとしています。比較を終了すると、配列が空であることをユーザーに確認するプロンプトが表示されます。PHPは配列から最初の値を削除します

しかし、配列が2の値を残すと、プログラムは最初の値の削除を停止します。


コード:

<?php 
$activepath = array('a,s,d,e','a,n,m,e','a,k,g,e','a,q,w,e'); 
$path = null; 
for($x = 0 ; $x < count($activepath); $x++) 
{ 
$path = explode(",", $activepath[$x]); 
if($path[0].end($path) === "ae") 
{ 
array_shift($activepath); 
} 
var_dump($activepath); 
} 
?> 


結果:

C:\wamp64\www\asd\test.php:18: 
array (size=3) 
0 => string 'a,n,m,e' (length=7) 
1 => string 'a,k,g,e' (length=7) 
2 => string 'a,q,w,e' (length=7) 

C:\wamp64\www\asd\test.php:18: 
array (size=2) 
0 => string 'a,k,g,e' (length=7) 
1 => string 'a,q,w,e' (length=7) 
+0

あなたの質問には意味がありません。すべての値は、aで始まり、eで終了します。それらをすべて削除する必要がありますか?または最初のものだけ?また、なぜループ?ループすると、次の要素が最初の要素になるたびにすべての値が削除されます。 –

答えて

0

あなたは、両方の配列のうちの最初の要素をシフトするだけでなく、あなたが見に使用しているインデックスをインクリメントしていますアレイ。 forループの代わりに、フラグが設定されるまで検査を続行し、配列の最初の要素がでなく、が条件と一致することを確認したら、そのフラッシュをtrueに設定します。

0

シフトと同時に配列をインクリメントするので、あなたがしていることは決してうまくいかないでしょう。 がチェックするために、このような何かを実行します。

<?php 

$activepath = array('a,s,d,e', 'a,n,m,e', 'a,k,g,e', 'a,q,w,e'); 
$path = null; 
$newarray = array(); 
for ($x = 0; $x < count($activepath); $x++) { 
    $path = explode(",", $activepath[$x]); 
    if ($path[0] . end($path) === "ae") { 
     array_push($newarray, $activepath[$x]); 
    } 
    var_dump($activepath); 
} 
if(count($newarray) == count($activepath)) 
    echo "All the element have 'ae'"; 

?> 
0

は、あなたのヒントをあなたにJアールズありがとうございました。私はあなたのヒントでそれを解決することができます。

<?php 
$activepath = array('a,s,d,e','a,n,m,e','a,k,g,e','a,q,w,e'); 
$path = null; 
$x = 0; 

while ($activepath != null) 
{ 

$path = explode(",", $activepath[$x]); 

if($path[0].end($path) === "ae") 
{ 
array_shift($activepath); 
} 

if($activepath == null) 
{ 
echo 'active-path is empty'; 
} 

var_dump($activepath); 

if($activepath == null) 
{ 
break; 
} 

} 
?> 
関連する問題