尝试创建用于导入CSV数据的php类。对不起看起来凌乱的代码。我创建了一个函数_santitize_product_list()来过滤CSV文件,分离出传递导入要求的产品数据和缺少某些东西的产品数据。如果出现以下情况,该功能正常:
$this->_sanitized_data = $this->_sanitize_product_list($this->_csv_data);
这样我就得到一个包含两个组的数组。如果我想将它们分开,我会尝试使用list()
:
list($this->_sanitized_data, $this->_error_list) = $this->_sanitize_product_list($this->_csv_data);
这次代码返回Undefined offset:1错误。我的问题是为什么list()在这种情况下不起作用?
class data_import_update {
protected $_dbc;
protected $_update;
protected $_total_line;
protected $_csv_data;
protected $_sanitized_data;
protected $_error_list;
protected $_update_list;
protected $_import_list;
// constructor
// plug in DB connection
function __construct($csv_data) {
$this->_csv_data = $csv_data;
// step1. fiter the input data
//list($this->_sanitized_data, $this->_error_list) = $this->_sanitize_product_list($this->_csv_data);
$this->_sanitized_data = $this->_sanitize_product_list($this->_csv_data);
} // End of Constructor
// filter out items that no meet requirement
private function _sanitize_product_list ($list_input) {
$err_item = array();
foreach ($list_input as $key => $item) {
//require fields: product_sku, product_name, product_unit, product_packaging, category, file_url, slash in the category
//make sure each item required fields aren't left empty
// || empty($item['file_url']) empty($item['product_name']) || empty($item['product_packaging']) ||
if (empty($item['product_sku']) || (empty($item['category']) || !strpos($item['category'], '/'))) {
// log error item and unset it from import list
$err_item[] = $list_input[$key]['product_sku'];
unset($list_input[$key]);
}
} // End of foreach loop
if (!empty($err_item[0])) {
return array('import_list'=>$list_input, 'error_item'=>$err_item);
}else {
return array('import_list'=>$list_input);
}
}
答案 0 :(得分:4)
如果检查$err_item
,则其他条件只返回数组中的一个元素。我只能假设您的代码符合返回条件,因此您的list()
调用不会使用第二个参数。
答案 1 :(得分:2)
list()
仅适用于数字数组,而不适用于关联数组,因为它分配来自$array[0]
的第一个变量,来自$array[1]
的第二个变量,依此类推。您还需要始终返回2个元素。因此,最后将if
更改为:
return array($list_input, $err_item);