4

我正在使用 Codeigniter 及其验证规则 - 自定义回调验证。无论如何,我认为这似乎与 CI 无关。

我有这个函数可以返回一个字符串……</p>

function array_implode($a)
{
  return implode(',', $a);
}

…但我总是收到一条消息 implode(): Invalid arguments passed

但是var_dump()给我看这个:

array(2) {
  [0]=> string(10) "First item"
  [1]=> string(11) "Second item"
}

怎么了?

4

3 回答 3

9

为什么?为什么要编写一个调用 std 函数的函数?为什么不写implode(',', $array);而不是增加函数调用的开销?

另外:什么var_dump输出数组?它是函数$a内部的转储吗?array_implode可以肯定$a的是总是一个数组,并且你坚持要保留你的array_implode函数,编辑代码看起来像这样:

function array_implode(array $a)
{//type hinting: this function will only work if $a is an array
    return implode(',',$a);
}
于 2013-05-13T08:33:32.307 回答
7

代码不应引发任何错误。大概有什么隐藏的东西。使用此功能找出错误:

function array_implode($a)
{
  // print detailed info if $a is not array
  if(!is_array($a)) {
    var_dump($a); // what is in $a
    var_dump(debug_backtrace()); // where exactly was it called?
    exit;
  }
  return implode(',', $a);
}
于 2013-05-13T08:41:11.850 回答
7

您可以转换$a为数组以确保在使用时始终使用数组implode

function array_implode($a) {
    return implode(',', (array) $a);
}
于 2013-05-13T08:50:35.150 回答