Php 如何修复:数组\u推送似乎无法节省附加值
我正在从一个电报机器人的数据库中加载用户信息。我获取chatid、车号和计时器值 将创建一个阵列,以容纳不同的车辆及其用户 随后,我检查每个数据库结果/用户的汽车是否存在于数组中。如果没有,则会将新阵列推入阵列中。如果车辆存在,则当前用户将作为一个数组添加到用户数组中 然而,这似乎不起作用。 注意:为了检查数组中是否存在该值,我使用了一个单独的函数,因为in_数组不适用于多维。此功能经过测试并正常工作 foreach循环中的第一个echo输出一个数组,其中显示所有用户。退出循环时,第二次打印仅显示原始用户 数据库中当前有两个用户,他们在同一辆车上注册 $sql='从car不为空的电报用户中选择chatid、car、定时器'; $result=$connection->query$sql; $array=[]; 如果$result->num_rows>0{ 而$row=$result->fetch\u assoc{ 如果$row['timer']!=NULL{ 如果!在数组中\r$行['car',$array{ 数组\u push$array,['car'=>$row['car'],'users'=>[[['user'=>$row['chatid'],'timer'=>$row['timer']],'hunt'=>; }否则{ foreach$数组作为$元素{ 如果$element['car']==$row['car']{ 数组_push$element['users'],['user'=>$row['chatid'],'timer'=>$row['timer']; } echo print\u r$元素,true; } echo print\u r$array,true; } } } }Php 如何修复:数组\u推送似乎无法节省附加值,php,arrays,multidimensional-array,push,Php,Arrays,Multidimensional Array,Push,我正在从一个电报机器人的数据库中加载用户信息。我获取chatid、车号和计时器值 将创建一个阵列,以容纳不同的车辆及其用户 随后,我检查每个数据库结果/用户的汽车是否存在于数组中。如果没有,则会将新阵列推入阵列中。如果车辆存在,则当前用户将作为一个数组添加到用户数组中 然而,这似乎不起作用。 注意:为了检查数组中是否存在该值,我使用了一个单独的函数,因为in_数组不适用于多维。此功能经过测试并正常工作 foreach循环中的第一个echo输出一个数组,其中显示所有用户。退出循环时,第二次打印仅显
foreach中的代码只将值推送到$element变量中。未插入原始的$array变量。要修改原始$array变量,您有两个选项 1通过引用在foreach中指定值
foreach ($array as &$element) {
if ($element['car'] == $row['car']) {
array_push($element['users'], ['user' => $row['chatid'], 'timer' => $row['timer']]);
}
echo print_r($element, true);
}
确保在foreach中的$front元素前面添加(&N)。这将允许您编辑原始的$array。
有关foreach和引用的更多信息
2您可以使用索引并直接推送到$array变量
foreach ($array as $index => $element) {
if ($element['car'] == $row['car']) {
array_push($array[$index]['users'], ['user' => $row['chatid'], 'timer' => $row['timer']]);
}
}
优化建议
您可以使用$row['car']值对数组进行索引。这样,检查它是否已经存在并推送新值的速度会更快
$array = [];
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if ($row['timer'] != NULL) {
if (!array_key_exists($row['car'], $array)) {
$array[$row['car']] = [
'car' => $row['car'],
'users' => [
['user' => $row['chatid'], 'timer' => $row['timer']]
],
'hunt' => ''
];
} else {
array_push(
$array[$row['car']]['users'],
['user' => $row['chatid'], 'timer' => $row['timer']]
);
}
}
}
echo print_r($array, true);
}
foreach中的代码只将值推送到$element变量中。未插入原始的$array变量。要修改原始$array变量,您有两个选项 1通过引用在foreach中指定值
foreach ($array as &$element) {
if ($element['car'] == $row['car']) {
array_push($element['users'], ['user' => $row['chatid'], 'timer' => $row['timer']]);
}
echo print_r($element, true);
}
确保在foreach中的$front元素前面添加(&N)。这将允许您编辑原始的$array。
有关foreach和引用的更多信息
2您可以使用索引并直接推送到$array变量
foreach ($array as $index => $element) {
if ($element['car'] == $row['car']) {
array_push($array[$index]['users'], ['user' => $row['chatid'], 'timer' => $row['timer']]);
}
}
优化建议
您可以使用$row['car']值对数组进行索引。这样,检查它是否已经存在并推送新值的速度会更快
$array = [];
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if ($row['timer'] != NULL) {
if (!array_key_exists($row['car'], $array)) {
$array[$row['car']] = [
'car' => $row['car'],
'users' => [
['user' => $row['chatid'], 'timer' => $row['timer']]
],
'hunt' => ''
];
} else {
array_push(
$array[$row['car']]['users'],
['user' => $row['chatid'], 'timer' => $row['timer']]
);
}
}
}
echo print_r($array, true);
}
您通常可以将foreach视为创建正在处理的值的副本。因此,在您的例子中,$element是$array[$i]中的项的副本,因此更改它不会更改$array中的原始项。如果您真的想修改它,可以让$element引用数组索引,例如foreach$array as&$element。谢谢您指出这一点!您通常可以将foreach视为创建正在处理的值的副本。因此,在您的例子中,$element是$array[$i]中的项的副本,因此更改它不会更改$array中的原始项。如果您真的想修改它,可以让$element引用数组索引,例如foreach$array as&$element。谢谢您指出这一点!谢谢你详尽的答复。我喜欢这个优化建议,我会应用它。谢谢你详细的回复。我喜欢优化的建议,我会应用它。