【发布时间】:2012-09-10 10:50:35
【问题描述】:
我不知道我在下面的代码中做错了什么,但它不起作用。
if($_data_count = count($_csv_raw_array) > 0){
foreach($_csv_raw_array as $_csv_row){
array_push($this->_data, array_map(call_user_func(array($this, 'replace')), $_csv_row));
}
return $this->result(true, 'CSV parsing done.', '', $this->_data);
}
// 而替换函数是:
private function replace($_value){
return preg_match('/(\r\n|\n|\r)/', $_value) ? '' : $_value;
}
但我不知道为什么它不起作用并抛出异常:
遇到了 PHP 错误
严重性:警告
消息:Import::replace() 缺少参数 1
文件名:libraries/Import.php
行号:116
基本上我想要在这里导入一个我已经导入的 CSV 文件,现在我想将数组中存在的任何换行符替换为空(无)。但是每次我执行这段代码时,它都会抛出一个异常。你们那里的人可以建议吗?请。
感谢
【问题讨论】:
-
您应该完全删除
call_user_func,因为这会导致该函数被立即调用;改为使用:array_map(array($this, "replace"), $_csv_row) -
@Mahn,错了,replace 被调用时没有参数。
-
@dbf 因为参数通常会由 array_map 传递,如果不是因为 call_user_func 会立即调用该函数,从 OPs 代码的外观来看,这不是他打算做的.你可以做
array_map("functionThatExpectsArgument", $array),但你不能做:array_map(call_user_func("functionThatExpectsArgument"), $array) -
array_map 的第一个参数是可调用的,您肯定会收到错误,因为在您的示例中它将有一个数组。
-
@dbf 不,这是在不使用闭包的情况下指向可调用对象属性的标准方式,传递 array($this, "replace") 只会指向 $this->replace() 并验证作为可调用的参数。见:php.net/manual/en/language.types.callable.php
标签: php arrays class map array-map