2016-08-21 4 views
3

私は1から4のループを持っていますが、私は1,2,4を含む配列を持っていますが、3を逃してしまいます。問題を解決するために欠けている3を0に入れ替えます、またはすべての同じ値を取得し、両面を比較する?私はそれが同じかどうか両側を比較する必要があるので。ループの値と配列の値とを順番に比較する方法はありますか?

このコードでは、「undefined offset 3」というエラーが表示されます。

$a = array(1,2,4); 
for ($i=1; $i <= 4; $i++) { 
    if ($i==$a[$i]) { 
     echo 'true'; 
    } else { 
     false; 
    } 
} 

そのような何か

1 & 1 = true 
2 & 2 = true 
3 & = false 
4 & 4 = true 

とディスプレイのよう

1. true 
2. true 
3. false 
4. true 
+0

最後の配列を末尾($ a)にしてfor関数に入れてください – daremachine

答えて

0

のようなものが同じ値を持っているすべてのそれらを比較するが、他の方法です:おそらく

$a = array(1,2,4); 
$flipped = array_flip($a); 
for($i = 1; $i <= 4; $i++){ 
    $res[$i]="false"; 
    if(array_key_exists($i, $flipped)){ 
     $res[$i] = "true"; 
    } 
} 

foreach($res as $key=>$value){ 
    echo $key.". ".$value."<br/>"; 
} 
4

最もストレートな返信方法はin_array()です。

$a = [1, 2, 4]; 

for ($i = 1; $i <= 4; $i++) { 
    echo $i.'. '.(in_array($i, $a) ? 'true' : 'false').PHP_EOL; 
} 

ここでは、作業はexampleです。あなたの配列の

+0

これは本当に便利です –

0

値:あなたは$a[$i]を使用する際に、角括弧内の値ではない値に、配列のキーを参照するため$a = array(1, 2, 4)は、あなたのforループで$iに対応していません。

PHPの配列は、値に対応するキーを持つ順序付けられたマップです。もし$a = array(1, 2, 4)ように、キーを割り当てることなく、値の配列を定義すると、PHPは自動的にゼロから始まる値のそれぞれに対して整数キーを作成する効果では、このアレイ作成されるように:あなたが示されたコードで

[0 => 1, 1 => 2, 2 => 4] 

配列がソートされている場合、シーケンスの要素が欠落していないかどうかを確認する1つの方法は、配列のcurrentの値を各インクリメントごとにチェックすることですforループを実行し、値が一致するとnext要素に移動します。

$a = array(1,2,4); 

for ($i=1; $i <= 4; $i++) { 
    if (current($a) == $i){ 
     echo "$i: true".PHP_EOL; 
     next($a); 
    } else { 
     echo "$i: false".PHP_EOL; 
    } 
} 

配列これが機能するためにソートする必要があります。あなたの例にあるように順序どおりでない場合は、sort($a);でソートすることができます。

関連する問題