三、数组

1、基本内容

  • range(low,high,[step]);函数,创建一个包含指定范围的元素的数组。
    参数step:可选。规定元素之间的步进制。默认是 1。
    如:range(0,10,2);输出以2递增,到10结束的数组。
  • 循环输出数组内容
$price['a'] = 100; 
$price['b'] = 10; 
$price['c'] = 4;
1-foreach()方法
foreach ($price as $key=>$value){
        echo $key." - ".$value."<br />";
    }
2-each()方法
while($element = each($price)){
        echo $element['key'];
        echo " -- ";
        echo $element['value'];
        echo "<br />";
    }
3-list()方法
reset($price);
使用each()函数时,数组将记录当前元素,若要在相同的脚本中
多次使用该数组,应重置数组的指针到开始处
while(list($product,$pric) = each($price)){
        echo $product." - - ".$pric."<br />";
    }
list()可以重命名数组的key和value值,该函数只使用于数字索引的数组,且默认从0开始
  • 二维数组
$products = array(
            array('Code' => 'TIR',
                    'Desc' => 'Tires',
                    'Price' => 100
            ),
            array('Code' => 'OIL',
                    'Desc' => 'Oil',
                    'Price' => 10
            ),
            array('Code' => 'SPK',
                    'Desc' => 'Spark Plugs',
                    'Price' => 4
            ),
    );
    for($row=0; $row<3; $row++){
        while(list($key, $value) = each($products[$row])){
            echo " |$value";
        }
        echo " |<br />";
    }
输出:
|TIR |Tires |100 |
|OIL |Oil |10 |
|SPK |Spark Plugs |4 |
  • 数组排序(一维数组和多维数组)
  • 一维数组的一些排序函数
    1、适用于无关联的数组,如一维数字索引数组
$arr = array('Tir','Oil' ,'Spk' ,);
sort(arr,[sortingtype]); 函数对索引数组进行升序排序
如果成功则返回 TRUE,否则返回 FALSE
参数sortingtype:可选。规定如何比较数组的元素/项目
0 = SORT_REGULAR - 默认。把每一项按常规顺序排列
1 = SORT_NUMERIC - 把每一项作为数字来处理
2 = SORT_STRING - 把每一项作为字符串来处理。

2、适用于关联数组的排序如一维关联数组

$arr = array('Tir' => 100,'Oil' => 10,'Spk' => 4,);
asort();ksort();
若用关联数组存储各个项目和它们的价格,
就需要用不同的排序函数使关键字和值在排序时仍然保持一致。
asort();将数组的value值升序排序
ksort();将数组的key值升序排序

3、反向排序

对应于 sort(),asort(),ksort(),反向排序函数依次为
rsort(),arsort(),krsort(),使数组降序排序。
  • 多维数组排序usort()
usort();用例:
    $products = array(
            array('Code' => 'TIR',
                    'Desc' => 'Tires',
                    'Price' => 100
            ),
            array('Code' => 'OIL',
                    'Desc' => 'Oil',
                    'Price' => 10
            ),
            array('Code' => 'SPK',
                    'Desc' => 'Spark Plugs',
                    'Price' => 4
            ),
    );
    usort($products, "usortRank");
    function usortRank($a,$b){
        $a1 = $a['Price'];
        $b1 = $b['Price'];
        if($a1 == $b1){
            return 0;
        }
        return ($a1>$b1 ?  1:-1);
    }
    print_r($products);

类似于asort()和ksort()对应有uasort()和uksort()

  • 对数组进行重新排序
    shuffle()函数将数组次序随机打乱;
    array_reverse()给出一个原数组的反向排序
    array_push()函数将每个新元素添加到数组的末尾
    array_pop()函数删除并返回数组末尾的一个元素
  • explode()函数:将字符串打散为数组
explode(separator,string,limit);
*separator*必需。规定在哪里分割字符串。
*string*必需。要分割的字符串。
*limit*可选。规定所返回的数组元素的数目。
可能的值:
大于 0 - 返回包含最多 *limit* 个元素的数组
小于 0 - 返回包含除了最后的 -*limit* 个元素以外的所有元素的数组
0 - 返回包含一个元素的数组
如:
$str = 'one,two,three,four';
print_r(explode(',',$str));输出结果为:Array ( [0] => one [1] => two [2] => three [3] => four)
print_r(explode(',',$str,0));输出结果为:Array ( [0] => one,two,three,four )
print_r(explode(',',$str,2));输出结果为:Array ( [0] => one [1] => two,three,four )
print_r(explode(',',$str,-1));//返回不包含最后一个元素的数组
即 Array ( [0] => one [1] => two [2] => three )
  • 数组中浏览
each() 函数返回当前元素的键名和键值,并将内部指针向前移动
current() - 返回数组中的当前元素的值
end() - 将内部指针指向数组中的最后一个元素,并输出
next() - 将内部指针指向数组中的下一个元素,并输出
prev() - 将内部指针指向数组中的上一个元素,并输出
reset() - 将内部指针指向数组中的第一个元素,并输出
--
$arrTest = range(1, 10);
print_r(each($arrTest));
//Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 )
--2
    $people = array("Bill", "Steve", "Mark", "David");
    reset($people);
    while (list($key, $val) = each($people)){
        echo "$key => $val<br>";
    }
--例子
    <?php
    $people = array("Bill", "Steve", "Mark", "David");
    echo current($people) . "<br>"; // 当前元素是 Bill
    echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
    echo current($people) . "<br>"; // 现在当前元素是 Steve
    echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill
    echo end($people) . "<br>"; // 最后一个元素是 David
    echo prev($people) . "<br>"; // David 之前的元素是 Mark
    echo current($people) . "<br>"; // 目前的当前元素是 Mark
    echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill
    echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
    print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针
    ?>
  • array_walk($arr, $func, [userdata...])
    对数组中的元素运用自定义函数,在函数中,数组的键名和键值是参数
       $arrTest = range(1, 10);
    function my_print(&$value,$key,$factor){
        echo $value *= $factor;
        echo "<br />";
    }
    array_walk($arrTest, 'my_print', 3);
    echo "<hr/>";
    print_r($arrTest);
这里的&符号是引用传值,将数组的每个元素的值都乘以3。
  • extract($arr, $extract_rules, $prefix)
    该函数对数组键名作为变量名,使用数组键值作为变量值
*array*
必需。规定要使用的数组。
*extract_rules*
可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。
可能的值:
EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
EXTR_SKIP - 如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 *prefix*。
EXTR_PREFIX_ALL - 给所有变量名加上前缀 *prefix*。
EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 *prefix*。
EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。
EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。
-
*prefix*
可选。请注意 *prefix* 仅在 *extract_type* 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。
前缀和数组键名之间会自动加上一个下划线
1-
    $arr = array('k1'=>'v1','k2'=>'v2','k3'=>'v3');
    extract($arr);
    echo $k1;//输出v1
2-
    $k1 = 'bv';
    $arr = array('k1'=>'v1', 'k2'=>'v2', 'k3'=>'v3');
    extract($arr, EXTR_PREFIX_SAME, 'same');
    echo "$k1 , $k2 , $k3 , $same_k1";
    //输出 bv , v2 , v3 , v1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容