0

こんにちは私は特定の値について特定の配列をチェックすることに取り組んでいます。

私の配列は次のようになります

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」を配列内にあると認識させる方法について何か提案はありますか?

編集:これは配列内の配列であることがわかりました。in_array()を組み合わせて、次のように言うことは可能ですか?「これらの配列の1つの中に値「1」があります」

4

5 に答える 5

3

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

$in = false;
foreach ($positions as $pos) {
    if (in_array(1, $pos)) {
        $in = true;
        break;
    }
}
于 2012-04-27T01:40:18.307 に答える
1

in_array最初のレベルのみをチェックします。この場合、それは配列の束だけを見て、どんな種類の数も見ません。代わりに、を使用して配列をループすることを検討し、それが期待どおりの場所であるforeachかどうかを確認してください。1

于 2012-04-27T01:40:23.580 に答える
1

これは、$ positionが配列の配列(多次元配列)であるためです。単純な「1」は含まれていません。

代わりにforeachループを試してください。

foreach($postions as $value)
    if ($value["pos"] == '1')
        echo "x ".$value["mark"];
于 2012-04-27T01:41:24.517 に答える
0

問題は、それ1が実際にはアレイにないことです。array配列内のの1つにあります。1Arrayを明らかに同じではない値と比較しています。

このような何かがあなたを始めるはずです:

foreach ($positions as $position) {
    if ($position['pos'] == 1) {
        echo "x";
        break;
    }
}
于 2012-04-27T01:41:18.797 に答える
0

最初のスニペットで使用するため、配列$positionsは再帰的です。再帰的ではありません(PHPマニュアルを参照)。したがって、再帰配列(ソース)で機能するカスタム関数が必要です。$positions[]in_array

<?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()

于 2012-04-27T01:41:54.887 に答える