从fetch_array搜索BOTH数组时,array_search返回0

时间:2014-06-02 00:56:56

标签: php sql arrays

我正在尝试检索数据库中特定列的数字索引。我需要从数字和关联索引访问它,所以我需要获取两个。

以下是示例代码:

$data = mysqli_query($con, $sql) or die(mysql_error());
$student = mysqli_fetch_array($data) or die(mysql_error());

$index = array_search("columnName", array_keys($student));

无论我放入什么“columnName”,它总是返回0。我设法用一个循环或两个数组,一个数字和其他关联来解决这个问题,但我想知道为什么这不起作用......

3 个答案:

答案 0 :(得分:2)

问题是您的值为0.因为0 ==' id'。但是您可以将第三个参数设置为true以进行严格匹配。所以它会是:

$index = array_search('columnName', array_keys($student), true);

答案 1 :(得分:1)

这个(array_search)可能会在失败或Boolean值时返回integer(index of item) false:

  

警告此函数可能返回布尔值FALSE,但也可能返回a   非布尔值,其值为FALSE。请阅读有关的部分   布尔值获取更多信息。使用===运算符进行测试   返回此函数的值。

例如,这将返回0,但它是第一个索引(找到):

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('blue', $array); // 0
if(getType($key) == 'boolean'){
    // not found
}

这里的结果是0,如果它是integer那么它就是第一项的索引。因此,请确保0是否找到index。您可以将第三个参数设置为true以克服此问题:

  

严格如果第三个参数strict设置为TRUE则为   array_search()函数将搜索相同的元素   草垛。这意味着它还将检查针的类型   haystack和对象必须是同一个实例。

因此,使用严格的比较,您可以确保适当的结果:

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('blue', $array, true);
if($key !== false) {
    // Found the index in $key
}

答案 2 :(得分:0)

这个怎么样?:

$arrayMap = array();
foreach( array_keys( $array ) as $index => $key ) {
     $arrayMap[] = array(
          'index' => $index,//position 
          'key' => $key,//text key
          'value' => $array[$key]  //value
     );
}