2012-04-27 26 views
0

こんにちは私は特定の値の配列をチェックしています。配列内のPHPの値

私の配列が

while($row = mysqli_fetch_array($result)){ 

    $positions[] = array('pos' => $row['pos'], 'mark' => $row['mark']); 
} 

のように見える私は価値を知っている

<?php 
    if(in_array('1', $positions)){ 
      echo "x"; 
    } 
?> 

このような方法でそれから情報を取得しようとしている「1」の配列であるが、 xは出力として送信されていません。 "1"を配列に認識させる方法に関する提案はありますか?

編集: これは配列内の配列であることを認識しています。 " "は、これらの配列の1つの中の値 '1'です。

答えて

3

in_arrayは再帰的ではありません。 1が配列の配列内にあるかどうかをチェックしていますが、これは意味をなさないものです。各要素をループしてその方法をチェックする必要があります。

$in = false; 
foreach ($positions as $pos) { 
    if (in_array(1, $pos)) { 
     $in = true; 
     break; 
    } 
} 
1

in_arrayは、第1レベルのみをチェックします。この場合、配列の束だけが見えますが、数字はありません。代わりに、foreachで配列をループし、その場合は1が正しいかどうかを確認してください。

0

問題は、1は実際に配列に含まれていないということです。配列内のarrayのいずれかにあります。値1と数値Arrayを比較していますが、明らかに同じではありません。このような

何かがあなたが始める必要があります:$位置は配列の配列(多次元配列)であるため、

foreach ($positions as $position) { 
    if ($position['pos'] == 1) { 
     echo "x"; 
     break; 
    } 
} 
1

をだこと。 単純な '1'は含まれていません。

代わりのforeachループを試してみてください:

foreach($postions as $value) 
    if ($value["pos"] == '1') 
     echo "x ".$value["mark"]; 
0

あなたの配列$positionsが原因あなたが最初のスニペットで$positions[]を使用するという事実のために、再帰的です。 in_arrayは再帰的ではありません(PHP manualを参照)。

<?php 
function in_arrayr($needle, $haystack) { 
    foreach($haystack as $v){ 
     if($needle == $v) 
      return true; 
     elseif(is_array($v)) 
      if(in_arrayr($needle, $v)) 
       return true; 
    } 
    return false; 
} 
?> 

代わりにスクリプトでin_array()を呼び出すので、あなたが今in_arrayr()を呼び出す必要があります。そのため、あなたは、再帰的な配列(source)で動作するカスタム関数を必要としています。