php如何在删除数值型键名数组的第一个元素后,不改变其键名

php在对待array提供了很多操作,它可以代替c中的栈和队列来帮助我们完成很多事情

array_push()

array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。只能添加元素的值,不能添加键值对,要想添加键值对,可以直接赋值:

1
$arr[$key] = $value;   //前提,$arr是一个数组

array_pop()

array_pop() 函数删除数组中的最后一个元素(出栈)并返回被删除元素的值。

1
2
3
$arr = array(1,2,3);
echo (array_pop($arr)); //3
print_r($arr); //Array ( [0] => 1 [1] => 2 )

array_shift()

array_shift() 函数删除数组中第一个元素(出队),并返回被删除元素的值。
如果键名是数字的,所有元素都会获得新的键名,从 0 开始,并以 1 递增(参见下面例子)。

1
2
3
$a=array(0=>"red",1=>"green",2=>"blue");
echo array_shift($a);
print_r ($a); //redArray ( [0] => green [1] => blue )

如果不想改变其键名,博主用了一个比较笨的方法,把数组转化为对象,删除对象的第一个元素之后,再将对象转化为数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$arr = array("1"=>"red","2"=>"green","3"=>"blue");
print_r($arr); //Array ( [1] => red [2] => green [3] => blue )
$arr = array_to_object($arr);
print_r($arr); // stdClass Object ( [1] => red [2] => green [3] => blue )
foreach ($arr as $k => $value)
{
unset($arr->$k);//删除对象的$k属性,此处即把第一个属性删掉
break;
}
$arr = object_to_array($arr);
print_r($arr); //Array ( [2] => green [3] => blue )
//数组转化为对象
function array_to_object($array) {
if (is_array($array)) {
$obj = new StdClass();
foreach ($array as $key => $val){
$obj->$key = $val;
}
}
else { $obj = $array; }
return $obj;
}
//对象转化为数组
function object_to_array($object) {
if (is_object($object)) {
foreach ($object as $key => $value) {
$array["$key"] = $value;
}
}
else {
$array = $object;
}
return $array;
}

array_unshift()

array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头(入队),返回数组中元素的个数。
数值键名将从 0 开始,以 1 递增。字符串键名将保持不变。

1
2
3
4
5
6
$a=array(0=>"red",1=>"green");
array_unshift($a,"blue");
print_r($a); //Array ( [0] => blue [1] => red [2] => green )
$a=array("a"=>"red","b"=>"green");
array_unshift($a,"blue");
print_r($a); //Array ( [0] => blue [a] => red [b] => green )

评论