以下内容均截取自《Zend PHP5 学习指南》
数组比较
数组的比较相对的比较少发生,但我们可以用另外的操作器。如:$a = array (1, 2, 3);
$b = array (1 => 2, 2 => 3, 0 => 1);
$c = array (’a’ => 1, ’b’ => 2, ’c’ => 3);
var_dump ($a == $b); // True
var_dump ($a === $b); // False
var_dump ($a == $c); // True
var_dump ($a === $c); // False
如例, 在数组有相同元素,相同值和键,无论次序,操作器 == 比较结果为真。而操作器 === 则只有在连次序都一样时,才为真。同样的,我们可以用不等于和非证实操作器来决定两个数组是否不一样:
$a = array (1, 2, 3);
$b = array (1 => 2, 2 => 3, 0 => 1);
var_dump ($a != $b); // False
var_dump ($a !== $b); // True
反转和倒转 (Flipping and Reversing)
有两个函数名字相当令人困惑,而且很容易误用:array_flip() 和 array_reverse()。第一个是用来反转数组中元素的键和值:$a = array (’a’, ’b’, ’c’);
var_dump (array_flip ($a));
结果为:
array(3) {
["a"]=> int(0)
["b"]=> int(1)
["c"]=> int(2)
}
第二个函数是用来倒转数组中元素的次序:
$a = array (’x’ => ’a’, 10 => ’b’, ’c’);
var_dump (array_reverse ($a));
注意,键值为数字的将失去其关联的健值。
array(3) {
[0]=> string(1) "c"
[1]=> string(1) "b"
["x"]=> string(1) "a"
}
PHP 反排序
有些情况下,用户需要数组元素的次序是随机的,而不是有序的,这时就需要用shuffle()函数,如:$cards = array (1, 2, 3, 4);
shuffle ($cards);
var_dump ($cards);
结果:
array(9) {
[0]=>int(4)
[1]=>int(1)
[2]=>int(2)
[3]=>int(3)
}
有些情况下,用户需要数组元素的次序是随机的,而不是有序的,这时就需要用shuffle()函数,如:
$cards = array (1, 2, 3, 4);
shuffle ($cards);
var_dump ($cards);
结果:
array(9) {
[0]=>int(4)
[1]=>int(1)
[2]=>int(2)
[3]=>int(3)
}
以上例子中,键-值的关系没有了;但这可以用另一个函数array_keys()来很容易的进行补救。如:
$cards = array (’a’ => 10, ’b’ => 12, ’c’ => 13);
$keys = array_keys ($cards);
shuffle($keys);
foreach ($keys as $v) {
echo $v . " - " . $cards[$v] . "\n";
}
数组作为栈,队列
数组经常用作栈(后进,先出,或LIFO)和队列(先进,先出,或FIFO)结构。先看如何用作栈(Stacks):
$stack = array();
array_push($stack, ’bar’, ’baz’);
var_dump($stack);
$last_in = array_pop($stack);
var_dump($last_in, $stack);
结果:
array(2) {
[0]=>string(3) "bar"
[1]=>string(3) "baz"
}
string(3) "baz"
array(1) {
[0]=>string(3) "bar"
}
现在再看看如何用作队列(Queues):
$stack = array(’qux’, ’bar’, ’baz’);
$first_element = array_shift($stack);
var_dump($stack);
array_unshift($stack, ’foo’);
var_dump($stack);
结果:
array(2) {
[0]=>string(3) "bar"
[1]=>string(3) "baz"
}
array(3) {
[0]=>string(3) "foo"
[1]=>string(3) "bar"
[2]=>string(3) "baz"
}