为什么list()在我的案例中不起作用

时间:2015-08-03 19:38:44

标签: php

尝试创建用于导入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);
        }
    } 

2 个答案:

答案 0 :(得分:4)

如果检查$err_item,则其他条件只返回数组中的一个元素。我只能假设您的代码符合返回条件,因此您的list()调用不会使用第二个参数。

答案 1 :(得分:2)

list()仅适用于数字数组,而不适用于关联数组,因为它分配来自$array[0]的第一个变量,来自$array[1]的第二个变量,依此类推。您还需要始终返回2个元素。因此,最后将if更改为:

return array($list_input, $err_item);