【问题标题】:PHP-Warning: array_map(): Argument #2 should be an arrayPHP 警告:array_map():参数 #2 应该是一个数组
【发布时间】:2014-04-17 06:43:34
【问题描述】:

我有这个从 MySql 数据库中获取数据的代码:

   $sql = 'SELECT id,title,seotitle FROM ' . PROPERTIES_TABLE  . ' WHERE featured = "A" AND approved = 1 AND id = "' . safe($_GET['id']) . '" LIMIT 1';
   $r = $db->query ( $sql ) or error ('Critical Error' , mysql_error());
   $f = $db->fetcharray( $r );
  // Make all values in the array 'n/a' if empty
   $f = array_map ( 'if_empty', $f);  

如果_empty 是:

function if_empty ( $value ) 

 { 

  if ($value == '' || $value == '0') 
   return ''; 
  else 
   return $value; 

 }

现在,我看到了这个错误:

Warning: array_map(): Argument #2 should be an array in C:\xampp\htdocs\cms\qrcode.php on line 26

我该如何解决这个问题?

【问题讨论】:

  • 查询一定没有找到任何匹配的行,所以fetcharray()返回false表示它已经到了结果的末尾。
  • 问题是你的$db->fetcharray( $r ) 没有返回一个数组。您可以通过 var_dump($f) 来确保它
  • ->fetcharray()是你自己的方法吗?分享一下也会很有帮助。
  • @Jack 是的,很明显
  • @djay 它可能是框架的一部分;知道这将有助于解决问题。

标签: php mysql


【解决方案1】:

试试:

if ($f) {
    $f = array_map ( 'if_empty', $f);
}

【讨论】:

  • 检查$f 是否是一个数组而不是0falseempty 在逻辑结果方面会好得多。所以如果(is_array($f)){} 在这里更有意义
  • fetcharray 如果成功获取一行则返回一个数组,或者false 表示没有更多行。这是测试它的合乎逻辑的方法。
  • 如果你在循环,你不会写while ($row = $db->fetcharray(r))吗?我的if 与此类似。
  • @djay 我和 Barmar 一起做这个; $f 只能是数组或布尔值 false。如果$f真实,它必须是一个数组
  • 我假设它只是 mysql_fetch_arraymysqli_fetch_arrayPDO::fetch(PDO::FETCH_ARRAY) 的包装,并返回它们返回的任何内容。如果您觉得自己很迂腐,请发布您自己的答案。
【解决方案2】:

试试:

if(is_array($f))   {
   $f = array_map ( 'if_empty', $f);
}

【讨论】:

    猜你喜欢
    • 2019-10-23
    • 2016-02-09
    • 2015-02-20
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多