您的位置:首页 > 编程语言 > PHP开发

PHP备忘录:数组操作中容易被忽略的基础

2013-06-14 11:50 375 查看
以下内容均截取自《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"

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: