Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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 如何修复:数组\u推送似乎无法节省附加值_Php_Arrays_Multidimensional Array_Push - Fatal编程技术网

Php 如何修复:数组\u推送似乎无法节省附加值

Php 如何修复:数组\u推送似乎无法节省附加值,php,arrays,multidimensional-array,push,Php,Arrays,Multidimensional Array,Push,我正在从一个电报机器人的数据库中加载用户信息。我获取chatid、车号和计时器值 将创建一个阵列,以容纳不同的车辆及其用户 随后,我检查每个数据库结果/用户的汽车是否存在于数组中。如果没有,则会将新阵列推入阵列中。如果车辆存在,则当前用户将作为一个数组添加到用户数组中 然而,这似乎不起作用。 注意:为了检查数组中是否存在该值,我使用了一个单独的函数,因为in_数组不适用于多维。此功能经过测试并正常工作 foreach循环中的第一个echo输出一个数组,其中显示所有用户。退出循环时,第二次打印仅显

我正在从一个电报机器人的数据库中加载用户信息。我获取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; } } } }
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。谢谢您指出这一点!谢谢你详尽的答复。我喜欢这个优化建议,我会应用它。谢谢你详细的回复。我喜欢优化的建议,我会应用它。