Попытка создать класс php для импорта CSV-данных. Извините за беспорядочно выглядящие коды. Я создал функцию _santitize_product_list() для фильтрации через файл CSV, разделяющего данные продукта, которые передают требования к импорту и данные о продуктах, которые что-то не хватает. Функция работает нормально, если:почему list() не работает в моем случае
$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);
на этот раз код возвращает неопределенное значение смещения: 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);
}
}
В вашем 'else', когда вы' возврат массива («import_list» => $ list_input), 'есть только один элемент, индекс 0 и не элемент с индексом 1, но вы указали 'list()' два vars для заполнения. – AbraCadaver
возвращаемый выходной массив как это: Массив ( [import_list] => Массив ( [3] => Массив ( [публиковать] => 1 [product_sku] => BX4721 -BK .... ..... ) [error_item] => Массив ( [0] => BX3856 [1] => BX4711-MX [2] => BX3856 ) ) –
'if' на end иногда возвращает массив с 2 элементами, иногда только 1. – Barmar