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'”

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

那是因为 $positions 是一个数组数组(一个多维数组)。它不包含简单的“1”。

尝试使用 foreach 循环:

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

$positions由于您在第一个代码段中使用了这一事实,因此您的数组是递归的$positions[]in_array不是递归的(参见PHP 手册)。因此,您需要一个适用于递归数组(source)的自定义函数:

<?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 回答
0

问题是它1实际上不在数组中。它在array数组中的一个中。您正在将值1Array显然不相同的值进行比较。

这样的事情应该让你开始:

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