php数组

数字索引的数组:

数字索引数组就是键为数字的数组;

初始化一个数字索引的数组:

$a = array('a1', 'a2', 'a3');

循环数组的元素:

for($i = 0; $i < 3; $i++) {
     echo $a[$i].' ';
}

当然也可以使用foreach:

foreach ($a as $cur) {
     echo $cur.' ';
}

关联数组

数组的键为任意的,好比java中的Map。
初始化关联数组:

$a1 = array('a' => 10, 'e' => 50, 'c' => 100, 'b' => 30, 'd' => 60);

定义a1数组,有5个元素。
遍历数组有多种方法:
(1) 直接访问

 echo $a1['a'];

(2) 通过foreach访问,key为键,value为值

foreach ($a1 as $key => $value) {
       echo $key.' - '.$value.'<br/>';
}

(3)通过each获取数组的每一个元素,each()函数会返回一个带有4个数值和4个指向数组位置的索引数组。位置key和0包含了当前元素的键,而位置value和1包含了当前元素的值

while($everyone = each($a1)) {
        echo $everyone['key'];
        echo ' - ';
        echo $everyone['value'].'<br/>';
}

(4)通过list()函数将从each()函数返回的数组中所包含的0、1两个元素变为自定义名的新变量。

while(list($position, $price) = each($a1)) {
        echo $position.' - '.$price.'<br/>';
}

数组操作符

( 记录几个比较重要的)

现在又数组$a, $b
$a + $b 将符号+右边的数组元素(除去与左边数组相同的那些元素)附加到左边数组的后面;但是任何重复的键值不会被覆盖。

$a == $b 表示相等。如果$a和$b具有相同的

$a === $b表示恒等。如果$a和$b具有相同的值,并且元素的顺序和类型完全相同。


数组排序

1.sort函数 ,根据从小到大排序。第一个参数为数组,第二个参数可选,这个可先参数可以传递SORT_REGULAR、SORT_NUMBER、SORT_STRING,分别表示默认排序、对数字排序、对字符串排序。

$a3 = array(10, 2, 11, 3, 5);
sort($a3);
print_r($a3);

输出的为 Array ( [0] => 2 [1] => 3 [2] => 5 [3] => 10 [4] => 11 ),注意这里的下标。可以看到每个值对应的下表都是重新赋值的。 原本10的下标是0,现在是3。

2.asort函数,根据元素排序,不过他不会改变数组的下标。

    $a3 = array(10, 2, 11, 3, 5);
    asort($a3);
    print_r($a3);

输出效果 Array ( [1] => 2 [3] => 3 [4] => 5 [0] => 10 [2] => 11 ) ,可以看到元素值对应的下表没有改变。这是很有用的,当数组为关联数组时,下标不会丢失。可以看sort和asort分别排序关联数组的结果:
加入现在有数组:

$astr = array(
        'java' => 10,
        'c' => 70,
        'c#' => 35,
        'php' => 50,
        'c++' => 20
    );

asort排序结果 Array ( [java] => 10 [c++] => 20 [c#] => 35 [php] => 50 [c] => 70 )

sort排序结果 Array ( [0] => 10 [1] => 20 [2] => 35 [3] => 50 [4] => 70 )

区别在哪里很明显。

3.ksort函数,根据元素的来排序,同样会保留下标。

    $astr = array(
        'java' => 10,
        'c' => 70,
        'c#' => 35,
        'php' => 50,
        'c++' => 20
    );
    ksort($astr);
    print_r($astr);

输出结果 Array ( [c] => 70 [c#] => 35 [c++] => 20 [java] => 10 [php] => 50 )

4.反向排序函数: rsort类似sort,不过结果和sort相反,arsort同样类似asort,结果和它相反,krsort也是如此。

5.自定义排序 usort,它有2个参数,第一个为数组,第二个为自定义的函数。
可以看下usort函数对第二个参数的说明

@param callback $cmp_function
* The comparison function must return an integer less than, equal to, or
* greater than zero if the first argument is considered to be
* respectively less than, equal to, or greater than the second.

如果第一个值比第二个小,就要返回-1;如果第一个值比第二个大,就要返回1;如果第一个值和第二个相等,就要返回0;

    $astr = array(
        array('boo1', 'java' , 10),
        array('boo2', 'c', 70),
        array('boo1', 'c#', 35),
        array('boo2', 'php', 50),
        array('boo3', 'c++', 20)
    );
    function cmp($x, $y) {
        if($x[0] == $y[0]) {
            return $x[2] < $y[2] ? -1 : 1;
        } else {
            return $x[0] < $y[0] ? -1 : 1;
        }
    }
    usort($astr, 'cmp');
    print_r($astr);

这里函数的作用是现根据第0列从小到大排序,如果第0列元素相同,根据第2列元素从小到大排序。
输出结果 Array ( [0] => Array ( [0] => boo1 [1] => java [2] => 10 ) [1] => Array ( [0] => boo1 [1] => c# [2] => 35 ) [2] => Array ( [0] => boo2 [1] => php [2] => 50 ) [3] => Array ( [0] => boo2 [1] => c [2] => 70 ) [4] => Array ( [0] => boo3 [1] => c++ [2] => 20 ) )

asortksort对应的就是uasortuksort


数组中的一些函数

current() 返回当前指针指向的数组元素。
next() 将指向数组元素的指针向后移动以为,然后返回指向的那个元素。
prev() 和next()相反。
reset() 将指针指向数组的开始元素。
end() 将指针指向数组的最后一个元素。
array_walk() 可以对数组的每个元素进行相同的操作。有三个参数,第三个参数可选;第一个为数组,第二个为用户自定义并将作用于数组每个元素的函数。第三个如果使用了,它可以作为一个参数传递给我们自己的函数。
用法:

    $a = array(2=>10, 5=>2, 11=>4, 6=>1, 4=>3, 9=>7);
    function my_multiply($value, $key, $factor) {
        echo $value.' '.$key.' '.$factor.'<br/>';
    }
    array_walk($a, 'my_multiply', 999);

输出:

10 2 999
2 5 999
4 11 999
1 6 999
3 4 999
7 9 999

可以看到自定义函数中第一个参数是数组的值,第二个参数为数组的键,第三个参数为array_walk的第三个参数。

count()函数返回数组元素的个数。
sizeof()函数是count()的别名,貌似没区别。
array_count_values()函数会统计数组每个元素的值在数组中出现的次数。这个函数会返回一个包含频率表的关联数组。将以数组的值为关联数组的键,每个数组元素值出现的次数作为关联数组的值。
extract() 函数将数组转化为变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值