【问题标题】:array_search returns 0 when searching BOTH array from fetch_array从 fetch_array 搜索两个数组时,array_search 返回 0
【发布时间】:2014-06-02 00:56:56
【问题描述】:

n我正在尝试检索数据库中特定列的数字索引。我需要从数字索引和关联索引都访问它,所以我需要 fetch 是 BOTH。

这里是示例代码:

$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。我设法用一个循环或有两个数组,一个数字和另一个关联来解决这个问题,但我想了解为什么这不起作用......

【问题讨论】:

  • array_keys($student) 返回什么?
  • 它返回一个数组,其中键是我的表的数字索引,值是我的列名。如果我在 foreach (array_keys($student) as $keys=>$values) echo $keys.$values 中调用它,它们会正常显示。
  • 我猜这就是你想要的。请var_dump(array_keys($student)) 告诉我们它是什么
  • array(46) { [0]=> int(0) [1]=> string(2) "id" [2]=> int(1) [3]=> string( 4) "nome" [4]=> int(2) [5]=> string(9) "sobrenome" [6]=> int(3) [7]=> string(5) "idade" [8] => int(4) [9]=> string(11) "instrumento" [10]=> int(5) [11]=> string(3) "dia" [12]=> int(6) }
  • [0]=>int(0) 可能是问题吗?

标签: php sql arrays


【解决方案1】:

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

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

【讨论】:

  • PHP 会将 'id' 大小写为 0 和 0 == 0 的 int。true 表示使用 === 来比较类型是否相同
  • 为什么 PHP 将 'id' 更改为 INT 0?顺便说一句,非常感谢!
  • 因为当你使用 == 时,PHP 会在比较它们之前尝试将它们变成相同的类型。
【解决方案2】:

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

警告 此函数可能返回布尔值 FALSE,但也可能返回 计算结果为 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 如果第三个参数 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
}

【讨论】:

    【解决方案3】:

    这个怎么样?:

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

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      相关资源
      最近更新 更多