php array_push()要求参数1为数组,整数以

php array_push()要求参数1为数组,整数以,php,Php,我试图解决它,但我迷路了。你能看出我的错误吗 我有点不对劲: array_push($change_data[$y],$_POST['new']['location'][$y]); 我得到一个错误: array_push()要求参数1为数组,整数以 ‍$‍‍y是一个整数,但我需要将其保存在那里。我需要创建数组: $change_data(id => location = value) $location_count = count($_POST['new']['id']);

我试图解决它,但我迷路了。你能看出我的错误吗

我有点不对劲:

array_push($change_data[$y],$_POST['new']['location'][$y]);
我得到一个错误:

array_push()要求参数1为数组,整数以

‍$‍‍y
是一个整数,但我需要将其保存在那里。我需要创建数组:

$change_data(id => location = value)

$location_count = count($_POST['new']['id']);           
$change_data=array();  

for($y=0; $y<$location_count;$y++){ 
    if (!empty($_POST['new']['location'])) {
        array_push($change_data,$y);

        if (!empty($_POST['new']['location'][$y])) { 
            array_push($change_data[$y],$_POST['new']['location'][$y]);  
        }
    }
}
$change\u数据(id=>location=value)
$location_count=count($_POST['new']['id']);
$change_data=array();
对于($y=0;$y

当您使用
array\u push
时,它会将新元素放在数组的末尾,您无法确定
数组键

因此,
array\u push($change\u data[$y],$\u POST['new']['location'][$y]);

应该是
array\u push($change\u data,$\u POST['new']['location'][$y]);

如果您想决定密钥的类型,您可以这样做:

$change\u data[$y]=$\u POST['new']['location'][$y])

当您使用
array\u push
时,它会将新元素放在数组的末尾,您无法确定
数组键

因此,
array_push($change_data[$y],$_POST['new']['location'][$y])
应该是
array\u push($change\u data,$\u POST['new']['location'][$y])

如果您想决定密钥的类型,您可以这样做:

$change\u data[$y]=$\u POST['new']['location'][$y])

问题是您正在解引用该值,然后试图将其用作数组。那不行。因为
$change\u data[$y]
为我们提供了一个标量整数值,但是
array\u push
需要的是一个数组值,而不是标量值(因此会出现错误)

一种更简单的方法是直接分配给数组
$change\u data[]=$y
在语义上等同于说
array\u push($change\u data,$y)

另一个问题是
$change\u数据[$y]
可能并不总是您认为在这个循环中的数据,因为您有条件地推送到数组,并且
$y
线性递增。您不能使用
array\u push
选择键,但可以说
$change\u data[$y]=$y

最后,您的循环循环很尴尬,因为它做出了一些不正确的假设。也就是说,数组键始终是一个数值,从0开始依次递增

相反,如果我们实际更仔细地评估您在这里尝试做的事情,您会发现您只是试图使用
$\u POST['new']['id']
$\u POST['new']['location']
作为一个示例。遍历PHP数组和可遍历对象的更明智的方法是使用该构造,它可以确保此处的
for
循环不会

这里有一种更简单的方法来编写相同的代码,但不太容易出错

$change_data = [];
foreach(array_filter($_POST['new']['id']) as $key => $value) {
    if (!empty($_POST['new']['location'][$key])) {
        $change_data[$key] = $_POST['new']['location'][$key];
    }
}

这里的区别在于,
foreach
构造保证我们迭代
array\u过滤器($\u POST['new']['id'])
中的每个元素,并保证该循环中的任何元素都不会被视为
空()。由于键由
foreach
跟踪并存储在
$key
变量中,因此我们进行了相同的邻接列表假设,并在相同的键值下直接分配给
$change\u data

问题在于您取消了对值的引用,然后试图将其用作数组。那不行。因为
$change\u data[$y]
为我们提供了一个标量整数值,但是
array\u push
需要的是一个数组值,而不是标量值(因此会出现错误)

一种更简单的方法是直接分配给数组
$change\u data[]=$y
在语义上等同于说
array\u push($change\u data,$y)

另一个问题是
$change\u数据[$y]
可能并不总是您认为在这个循环中的数据,因为您有条件地推送到数组,并且
$y
线性递增。您不能使用
array\u push
选择键,但可以说
$change\u data[$y]=$y

最后,您的循环循环很尴尬,因为它做出了一些不正确的假设。也就是说,数组键始终是一个数值,从0开始依次递增

相反,如果我们实际更仔细地评估您在这里尝试做的事情,您会发现您只是试图使用
$\u POST['new']['id']
$\u POST['new']['location']
作为一个示例。遍历PHP数组和可遍历对象的更明智的方法是使用该构造,它可以确保此处的
for
循环不会

这里有一种更简单的方法来编写相同的代码,但不太容易出错

$change_data = [];
foreach(array_filter($_POST['new']['id']) as $key => $value) {
    if (!empty($_POST['new']['location'][$key])) {
        $change_data[$key] = $_POST['new']['location'][$key];
    }
}

这里的区别在于,
foreach
构造保证我们迭代
array\u过滤器($\u POST['new']['id'])
中的每个元素,并保证该循环中的任何元素都不会被视为
空()。由于键由
foreach
跟踪并存储在
$key
变量中,因此我们采用相同的邻接列表假设,并在相同的键值下直接分配给
$change\u data

$change\u data[$y]是一个整数而不是数组,如果您可以更精确地指定$change_数据的外观,那么我可以给您一个更好的答案,您当前的示例不明确,所以我只需要编写$y=array();对吗?我想你想要
array\u push($change\u data,$\u POST['new']['location'][$y])
,这将使用此值($\u POST['new']['location'][$y])
$change\u data[$y]=$\u POST['new']['location'][$y]
,向数组$change\u数据获取一个新索引。请告诉我们您正在尝试做什么?忘记
$y
数组
,告诉我们需要什么?$change_data[$y]是一个整数而不是数组,如果您可以更精确地指定$change_数据的外观,那么我可以给您一个更好的答案,您当前的示例不清楚,所以我只需要编写$y=array();操纵