php array_shift
时间: 2023-10-06 16:04:19 浏览: 40
PHP的array_shift()函数是用来删除数组中的第一个元素,并返回被删除的元素。在删除第一个元素后,数组中的所有元素会向前移动一位,同时数字键名会被重新计数,而字符串键名则保持不变。
举个例子,假设有一个数组$arr1=['a','b'=>'10',2=>'c'],使用array_shift($arr1)后,被删除的元素是'a',而数组$arr1变成了[0=>'10',1=>'c']。
相关问题
array_shift
array_shift 是一个 PHP 数组函数,它用于删除数组的第一个元素并返回它。如果数组是空的,它将返回 NULL。该函数会改变原始数组,即删除第一个元素后,原始数组中的元素索引会重新排序。例如:
```
$fruits = array("apple", "banana", "orange");
$first_fruit = array_shift($fruits);
echo $first_fruit; // 输出 "apple"
echo "<br>";
print_r($fruits); // 输出 Array ( [0] => banana [1] => orange )
```
在上面的例子中,我们首先创建了一个包含三个元素的数组 `$fruits`,然后使用 `array_shift` 函数删除了第一个元素 `"apple"` 并将其赋值给变量 `$first_fruit`。最后,我们输出了 `$first_fruit` 的值以及删除第一个元素后的 `$fruits` 数组。
for($i = 0;$i <50; $i++){ $data1 = $r["wr1_linktime"]; $data2 = $r["wr1_loop"]; $data3 = $r["wr1_onew"]; $data4 = $r["wr0_linktime"]; $data5 = $r["wr0_loop"]; $data6 = $r["wr0_onew"]; $data1 = "data1_" . ($i + 1); $data2 = "data2_" . ($i + 1); $data3 = "data3_" . ($i + 1); $data4 = "data4_" . ($i + 1); $data5 = "data5_" . ($i + 1); $data6 = "data6_" . ($i + 1); $time = date("H:i:s"); array_push($r[$wr1_linkt],$data1); array_push($r[$wr1_loop],$data2); array_push($r[$wr1_onew],$data3); array_push($r[$wr0_linkt],$data4); array_push($r[$wr0_loop],$data5); array_push($r[$wr0_onew],$data6); array_push($r[$wrc_time],$time); if(count($r[$wr1_linkt]) > 50){ array_shift($r[$wr1_linkt]); array_shift($r[$wr1_loop]); array_shift($r[$wr1_onew]); array_shift($r[$wr0_linkt]); array_shift($r[$wr0_loop]); array_shift($r[$wr0_onew]); array_shift($r[$wrc_time]); } usleep(10); }
这段代码有几个问题:
1. 变量名拼写错误:$wr1_linkt应为$wr1_linktime,$wr0_linkt应为$wr0_linktime。
2. 变量赋值覆盖:$data1-$data6在赋值前已经被赋值为$r中的值,再次赋值会覆盖掉原有的值。
3. 数组越界:如果$r中的某个数组长度不足50,就会导致array_shift出错。
以下是修改后的代码:
```php
for ($i = 0; $i < 50; $i++) {
$data1 = "data1_" . ($i + 1);
$data2 = "data2_" . ($i + 1);
$data3 = "data3_" . ($i + 1);
$data4 = "data4_" . ($i + 1);
$data5 = "data5_" . ($i + 1);
$data6 = "data6_" . ($i + 1);
$time = date("H:i:s");
array_push($r["wr1_linktime"], $data1);
array_push($r["wr1_loop"], $data2);
array_push($r["wr1_onew"], $data3);
array_push($r["wr0_linktime"], $data4);
array_push($r["wr0_loop"], $data5);
array_push($r["wr0_onew"], $data6);
array_push($r["wrc_time"], $time);
if(count($r["wr1_linktime"]) > 50){
array_shift($r["wr1_linktime"]);
array_shift($r["wr1_loop"]);
array_shift($r["wr1_onew"]);
array_shift($r["wr0_linktime"]);
array_shift($r["wr0_loop"]);
array_shift($r["wr0_onew"]);
array_shift($r["wrc_time"]);
}
usleep(10);
}
```
修改后的代码中,将变量名修正、删除不必要的变量赋值操作,并且在数组操作前增加了数组长度的检查,避免数组越界问题。