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

以下内容均截取自《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"
}


转载于:https://my.oschina.net/haigou20/blog/137510

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值