PHP-数组在哪里?

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

这个代码应该是有效的。我的意见:) 问题是我犯了这个错误:

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= 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)
。解决了!当它不工作的时候。好的!非常感谢。