【发布时间】:2014-07-28 18:49:43
【问题描述】:
我有一个非常奇怪的问题,我一直无法找到答案。我有一个 PHP 函数,可以将 CSV 数据读入一个数组,如果数据被成功读取,则返回 true,并通过引用变量将数组传回
function ReadCsvDataIntoArray($path, &$headers, &$array, $idFilter = NULL){
if(file_exists($path)){
$fh = fopen($path, 'r');
if($fh){
$headers = fgetcsv($fh);
$rowIdx = 0;
while($row = fgetcsv($fh)){
$addRow = true;
if($idFilter != NULL){
if(isset($row[0])){
if(!in_array($row[0], $idFilter)){
$addRow = false;
}
}
}
if($addRow){
$colIdx = 0;
foreach($row as $val){
$array[$rowIdx][$headers[$colIdx]] = $val;
$colIdx++;
}
$rowIdx++;
}
}
fclose($fh);
return true;
} else {
echo "Unable to open file: ".$path;
}
} else {
echo "CSV doesn't exist: ".$path;
}
return false;
}
如果函数返回为 true,我会检查以确保数组没有作为 null 或空返回,然后对数据进行排序。
if($this->ReadCsvDataIntoArray($client_library_path, $headers, $CSVdata, $log)){
if($CSVData != NULL){
usort($CSVdata, create_function('$a, $b', 'return $a["engagement"] < $b["engagement"];'));
// Do stuff with the sorted array
} else {
echo "CSV data is NULL.\n";
}
我不断从这里得到“CSV 数据为 NULL”。如果我将逻辑更改为if($CSVData == NULL) 甚至if(empty($CSVData)),它会进入if 语句,尝试对数组进行排序(尽管if 语句说它是空的,但它已满)并处理数据。
这是我的第二个问题出现的地方。这个 usort 在我的本地主机上工作:
usort($CSVdata, function($a, $b) { return $a["scheduled"] < $b["scheduled"]; });
但是因为它的php版本,它在服务器上不起作用,所以我把它改成了:
usort($CSVData, create_function('$a, $b', 'return $a["scheduled"] < $b["scheduled"];'));
但是使用 create_function 版本的 usort 我会收到此错误消息
Warning: usort(): The argument should be an array
我猜这与我的整个数组以某种方式被评估为空和 null 的事实有关,即使它不是。
【问题讨论】: