PHP-数组在哪里?
这个代码应该是有效的。我的意见:) 问题是我犯了这个错误: PHP警告:array_combine()要求参数2为数组 为什么$row不是数组PHP-数组在哪里?,php,Php,这个代码应该是有效的。我的意见:) 问题是我犯了这个错误: PHP警告:array_combine()要求参数2为数组 为什么$row不是数组 $lines = explode(PHP_EOL, $csv); $csvarray = array(); foreach ($lines as $line) { $csvarray[] = str_getcsv($line); } $head = $csvarray[0]; unset($csvarray[0]); $all_rows= ar
$lines = explode(PHP_EOL, $csv);
$csvarray = array();
foreach ($lines as $line) {
$csvarray[] = str_getcsv($line);
}
$head = $csvarray[0];
unset($csvarray[0]);
$all_rows= array();
$n=0;
while ($row = $csvarray != false) {
if($n>100) break;
$n++;
$all_rows[] = array_combine($head, $row);
}
print_r($all_rows);
因为
=
的优先级高于=
——因此您编写的内容实际上与
$row = ($csvarray != false)
比较的结果要么为真,要么为假,这就是分配给$row的结果。因为在PHP中,分配从右向左,比较运算符
=
过赋值运算符=
,这导致$row
为false
$csvarray = [];
var_dump($row = $csvarray != false); // bool(false)
var_dump($row); // bool(false)
var_dump($csvarray ); // array(0) { }
/* Notice the difference */
$csvarray = [];
var_dump(($row = $csvarray) != false); // bool(false)
var_dump($row); // array(0) { }
var_dump($csvarray ); // array(0) { }
这是因为表达式$csvarray!=false
优先于赋值(先发生),并导致false
。然后发生赋值,使$row==false
。要更改优先级,请在要首先发生的表达式周围使用parens()
。所以($row=$csvarray)!=错误
$csvarray = [];
var_dump($row = $csvarray != false); // bool(false)
var_dump($row); // bool(false)
var_dump($csvarray ); // array(0) { }
/* Notice the difference */
$csvarray = [];
var_dump(($row = $csvarray) != false); // bool(false)
var_dump($row); // array(0) { }
var_dump($csvarray ); // array(0) { }
打印($row)
并参见。这显然应该在提问之前完成。正如$csvarray!=false
等于true
,$row
是true
。因为$csvarray!=false
返回一个布尔值而不是数组:)好的,是一个印刷错误。仅供参考,如果CSV中的任何值可能包含换行符,$lines=explode(PHP_EOL,$CSV)代码>无论如何都会把事情搞砸。作为解决方案,可以使用foreach($csvarray as$row)
。解决了!当它不工作的时候。好的!非常感谢。