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();操纵