【问题标题】:Key in associative array exists or not关联数组中的键是否存在
【发布时间】:2013-11-08 16:40:57
【问题描述】:

我编写了一些 PHP 代码来从我的 MySQL 数据库中检索一些数据。

我的 NetBeans 调试器 (v7.4) 显示所有数组元素和相关键($data_array_from_db)哪些键与数据库表中的列字段对应,除了哪些数据库字段的键未填充(值为 NULL) .

但是,当在下面的代码中执行 array_key_exists() 函数以表示与此类未填充的数据库字段相对应的“akey”时,array_key_exists() 返回一个“真”值(而不是预期的假) - 好像key 确实存在(同样,NetBeans 调试器没有显示 $data_array_from_db['akey'])。

我确信数据库函数 array_key_exists() 可以正常工作。我解释错了吗?如果对应的数据库值为 NULL,该键是否/应该存在?

$data_array_from_db = $corpdb->GetSpecificDBRecords($sqlquery5); //GetSpecificDBRecords() includes some PDO statements
if (array_key_exists('akey', $data_array_from_db)) { // Database value is optional; exists?
  $response_array[0]['akey'] = $data_array_from_db['akey']; // This line executed while akey does not show in NetBeans debuggers
}
else { // Database value does not exist; set to 0
  $response_array[0]['akey'] = 0;
}

【问题讨论】:

  • $data_array_from_db 的 print_r 或 var_dump 会很有用...
  • 是的,它存在并且它的值是NULL...你也应该检查值
  • 来自手册本身 (us3.php.net/array_key_exists):注意:出于向后兼容性的原因,如果 key 是在以数组形式给出的对象中定义的属性,array_key_exists() 也将返回 TRUE。不应依赖此行为,应注意确保数组是数组。要检查对象中是否存在属性,请使用 property_exists()。
  • 执行var_dump($data_array_from_db) 并查看其中显示的内容。假设您是从数据库中获取的,那么具有空值的字段仍然有相应的可用键是有意义的。跨度>
  • thnx for all cmets (!) 我刚刚使用了 var_dump 它确实显示了密钥。我仍然想知道为什么 netbeans 不显示那些特定的键(??)

标签: php netbeans


【解决方案1】:

NULL 是一个值,如果你想替换它,你需要检查它。变化:

if(array_key_exists('akey',$data_array_from_db) ){

收件人:

if(array_key_exists('akey',$data_array_from_db) && !is_null($data_array_from_db['akey'])){

【讨论】:

    【解决方案2】:

    或者只是检查它是否存在并且它不为空:

    if (!empty($data_array_from_db['akey'])) {
    

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 2020-04-11
      • 1970-01-01
      • 2012-08-02
      • 2015-10-09
      • 1970-01-01
      • 2013-01-30
      • 2018-02-24
      • 2010-10-16
      相关资源
      最近更新 更多