Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是什么使这两个数组相加不同?_Php_Arrays - Fatal编程技术网

Php 是什么使这两个数组相加不同?

Php 是什么使这两个数组相加不同?,php,arrays,Php,Arrays,我用它来获取用户输入并清理代码。我试图解决这个问题,然后代码停止工作 这项工作: $BindVar[] = array(); $BindVar[] = $Email; $BindVar[] = $pass; 然而,这并不是: $BindVar[] = array($Email,$pass); 以下是我更改该行时中断的代码: foreach ($BindVars as $value) { $input[] = "'" . $mysqli->

我用它来获取用户输入并清理代码。我试图解决这个问题,然后代码停止工作

这项工作:

    $BindVar[] = array();
    $BindVar[] = $Email;
    $BindVar[] = $pass;
然而,这并不是:

    $BindVar[] = array($Email,$pass);
以下是我更改该行时中断的代码:

foreach ($BindVars as $value) {
        $input[] = "'" . $mysqli->real_escape_string($value) . "'"; // cleaning the input
    }
它给出了以下错误:

警告:mysqli::real_escape_string()要求参数1为字符串,数组以


要理解错误消息,我认为需要对数组进行一些解释。

如果使用括号,如
$bindVars[]
,则无需通过调用
array()
函数来说明它是一个数组

PHP将括号
[]
理解为数组声明


用括号
[]
数组()函数
声明

$BindVars[] = array($Email,$pass); 

// same as:
$BindVars = array(
    array($Email, $pass);
);
$bindVars
内创建一个新数组,该数组包含
$Email
$pass

因此,
$bindVars
已经是一个数组,因为括号
[]
。这给了我们一个多维数组

在代码中,它是一个二维数组,表示一个表。它是最常用的多维数组

$bindVars[][]
这样的三维数组(3对括号)表示立方体或骰子

一个四维数组
$bindVars[][]
(4对括号)就是一个立方体,每边都有另一个维度。--随着每一个进一步的维度,它变得更加令人难以置信---

回到二维数组

1。维度是行或记录

2。维度是列或字段

// 1. Dimension: 1. row
echo $bindVars[0]; // Output: Array() Here is your mysqli error coming from!
警告:mysqli::real_escape_string()预期参数1为 字符串,数组给定

改变

$BindVar[] = array($Email,$pass); 


[]
用于将新项追加到数组中
$BindVar[]=array(…)
正在将另一个数组放入第一个数组的该项中。这就是为什么在该项上运行
real\u escape\u string
失败的原因,因为该项不是字符串而是嵌套数组

$BindVar[] = $Email;
$BindVar[] = $pass;
这是一个包含2个字符串元素的数组

$BindVar[] = array($Email,$pass);
这是一个包含1数组元素且包含2字符串元素的数组

两者是不同的,应该以不同的方式处理。第一个是简单数组,第二个是多维数组

哦,我忘了你的

$BindVar[] = array();
这将导致意外行为,实际上会向
$BindVar
数组添加一个空白数组元素。从外观上看,我认为您只是希望将$BindVar声明为一个数组,请执行以下操作

$BindVar = array();

代码如何构造数组的伪符号:

第一:

$BindVar[] = array();
$BindVar[] = $Email;
$BindVar[] = $pass;

$BindVar
(
    Array(),
    Email,
    Pass
)
第二:

$BindVar[] = array($Email,$pass);

$BindVar
(
    Array(Email, Pass)
)
这两者显然不同

$BindVar[] = array();
^^^^^^^^^^---- push a new array into $BindVar
如果在此之前未定义
$bindvar
,则将创建一个新数组,然后将一个空数组推入其中。这使得
$BindVar[0]
成为一个数组,当您为绑定操作循环它时,您将把新的空数组传递给bind调用。这就是你的错误

你可能只想:

$BindVar = array();
        ^--- no []
你可以改变你喜欢的吼叫
$BindVar[]=array($Email,$pass)
$BindVar=array($Email,$pass)

要查看您所做的操作的结果,请在每种情况下使用
print\r($BindVar)
进行调试。。。赋值和追加之间的区别将变得很明显。这实际上并不能回答这两者之间的区别arrays@Hanky웃他确实给我展示了如何让它工作。其他几个解释了数组和指针值与对象内容的关系。这就是为什么我给了他答案。太好了,很高兴听到这个
$BindVar[] = array();
^^^^^^^^^^---- push a new array into $BindVar
$BindVar = array();
        ^--- no []