目录结构:

contents structure [-]

在这篇文章中,笔者将会介绍PHP中数组的使用,以及一些注意事项。之前笔者已经说过PHP是一门弱语言类型,因此php中的数组使用也比较灵活。

1.创建数组

创建数组的方式有好几种,比如:

<?php
//格式:
//$数组变量名[索引值]=资料内容
$foos[0] = "hello ";
$foos[1] = "world "; //格式:
//array( [key =>] value , ... )
//key 可以是 integer 或者 string。value 可以是任意类型。
$foos = array(prefix => "hello ",suffix => "world ");
$foos = array(0 => "hello ",suffix => "world "); //也可以不用指定键(key)
$foos = array("hello ","world "); //创建多维数组
//格式:
//array(
// array(...),
// array(...),
// array(...),
// ...);
//下面创建一个2行,第一行为1,2,3,4,5,6,第二行为1,2,3,4,5,6,7的二维数组。
$flat = array(
row1 => array(1,2,3,4,5,6),
row2 => array(1,2,3,4,5,6,7)
);
?>

在使用array(...)的形式创建数组时,其中key会有如下的强制转化要求:
1.包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
2.浮点数会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
3.布尔值会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
4.Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
5.数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

除此之外使用array(...)定义数组还有如下特性:
1.如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖.
2.如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

2.删除数组

PHP中允许删除整个数组,同时也允许删除某一个键/值对。
比如:

<?php
echo "begin\n"; $foos = array("how","are","you"); echo("counts = ".count($foos)."\n");
foreach ($foos as $f){
echo($f."\n");
} unset($foos); echo("counts = ".count($foos)."\n");
for($i = 0; $i <= count($foos); $i++){
echo($foos[$i]."\n");
}
echo("finish\n");
?>

输出结果为:

begin
counts = 3
how
are
you
counts = 0 finish

上面展示了在删除整个数组后,数组的数量就变成0了。接下笔者将会演示只删除其中某一个键/值对,以及需要注意的地方。

<?php
$arr = array("how","are","you");
print_r($arr);
print("----------------\n");
//清除键为1的键/值对
unset($arr[1]);
print_r($arr);
?>

输出结果如下:

Array
(
[0] => how
[1] => are
[2] => you
)
----------------
Array
(
[0] => how
[2] => you
)

通过这个结果可以看出,当使用unset()删除其中某一个键/值对时候,其余的键不会自动调整编号。非常容易理解这种设计,因为array本质上就是按照键/值对进行存储的,删除其中一对键/值对,就改变其他键/值对的话,肯定不符合常理,并且有些键更本就不能按照数值大小(字符串)排序。那么有没有一种常规的排序方法,能够在删除数组中的某一键/值对后,只把以数值为键的键值对从0升序排列呢?答案是肯定的,array_multisort(...)就能完成这样的功能。

<?php
$arr = array("how","are","dot"=>",","you");
print_r($arr);
print("----------------\n");
//清除键为1的键/值对
unset($arr[1]);
array_multisort($arr);
print_r($arr); ?>

输出结果:

Array
(
[0] => how
[1] => are
[dot] => ,
[2] => you
)
----------------
Array
(
[dot] => ,
[0] => how
[1] => you
)

通过输出结果可以看出,以字符串为键的键/值对保留了下来,以数值为键的键/值对被重新排序。

3.栈结构

上面说过,PHP中数组的使用非常灵活,同样可以用于模拟栈结构。栈结构具有“先进后出”的特点。数组中提供了array_push和array_pop方法。
array_push在尾部添加元素。
array_pop从尾部弹出一个元素。
例如:

<?php
$arr = Array(); array_push($arr, "how");
print("push \"how\" into array\n");
array_push($arr, "are");
print("push \"are\" into array\n");
array_push($arr, "you");
print("push \"you\" into array\n"); print("------------------------\n"); print("pop \"".array_pop($arr)."\" from array\n");
print("pop \"".array_pop($arr)."\" from array\n");
print("pop \"".array_pop($arr)."\" from array\n");
?>

输出结果为:

push "how" into array
push "are" into array
push "you" into array
------------------------
pop "you" from array
pop "are" from array
pop "how" from array

4.常用的数组处理函数

PHP中提供了许多数组处理函数,下面笔者列举一些常用的:
array each( array array)   返回 array 数组中当前指针位置的键/值对并向前移动数组指针
void list ( mixed ...)  通过一个操作给一组变量赋值
array_shift 将数组开头的单元移出数组
array_unshift 在数组开头插入一个或多个单元
array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array_merge 合并一个或多个数组
array_splice 把数组中的一部分去掉并用其它值取代

参考文章:

http://php.net/

【PHP】解析PHP中的数组的更多相关文章

  1. 【java】解析java中的数组

    目录结构: contents structure [+] 一维数组 1,什么是一维数组 2,声明一维数组的三种方式 二维数组 1,什么是二维数组 2,声明二维数组的3种方式 3,二维数组的遍历示例 数 ...

  2. 前端开发:Javascript中的数组,常用方法解析

    前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...

  3. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  4. 深度解析javascript中的浅复制和深复制

    原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...

  5. 解析jQuery中extend方法--源码解析以及递归的过程《二》

    源码解析 在解析代码之前,首先要了解extend函数要解决什么问题,以及传入不同的参数,会达到怎样的效果.extend函数内部处理传入的不同参数,返回处理后的对象. extend函数用来扩展对象,增加 ...

  6. 【PHP】最详细PHP从入门到精通(三)——PHP中的数组

     PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...

  7. Gson全解析(中)-TypeAdapter的使用

    TypeAdapter介绍 前面的Gson全解析(上)中我们理解并分别运用了JsonSerializer和JsonDeserializer进行JSON和java实体类之间的相互转化.这里利用TypeA ...

  8. 使用具体解释及源代码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter

    Adapter相当于一个数据源,能够给AdapterView提供数据.并依据数据创建相应的UI.能够通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作 ...

  9. 深度解析VC中的消息(转发)

    http://blog.csdn.net/chenlycly/article/details/7586067 这篇转发的文章总结的比较好,但是没有告诉我为什么ON_MESSAGE的返回值必须是LRES ...

随机推荐

  1. 从零搭建 ES 搜索服务(六)相关性排序优化

    一.前言 上篇介绍了搜索结果高亮的实现方法,本篇主要介绍搜索结果相关性排序优化. 二.相关概念 2.1 排序 默认情况下,返回结果是按照「相关性」进行排序的--最相关的文档排在最前. 2.1.1 相关 ...

  2. Linux 查看文件被那个进程写数据

    目录 背景 步骤 获取写文件的进程号 文件被那个进程使用,写数据不是用lsof可以找出来吗,但现实情况是lsof没找出来T_T 背景 centos7 在某一段时间监控报警磁盘使用率达99%,由于监控属 ...

  3. P3810 -三维偏序(陌上花开)cdq-分治

    P3810 [模板]三维偏序(陌上花开) 思路 :按照 1维排序 二维 分治三维树状数组维护 #include<bits/stdc++.h> using namespace std; #d ...

  4. webpack打包之有依赖es2015模块

    一.入口文件main.js import { isDepend } from './depend.js'; import { fn } from './depend2.js'; if(isDepend ...

  5. AE插入音乐

    将音乐文件(如MP3文件)直接拖拽到工程里就可以. 然后添加到合成里. 点击内容预览 ,就自动播放了. 在合成窗口里面,我们可以对于音频文件进行拖动,以及裁剪等操作,但是需要注意的是AE里面不能预览声 ...

  6. BZOJ.5338.[TJOI2018]xor(可持久化Trie)

    BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的 ...

  7. Stm32常见英文缩写

    Stm32常见英文缩写 https://wenku.baidu.com/view/4b9c2eee5022aaea998f0f5b.html STM32嵌入式开发常见缩写 https://wenku. ...

  8. IntelliJ IDEA无法更新maven索引

    maven索引的作用时在添加dependency的时候能有自动提示,不影响dependency的下载: 解决办法: 1.http://ju.outofmemory.cn/entry/359450 2. ...

  9. 命令和python模式转换

    安装完paython成功之后,就必须了解一下:命令模式和python交互模式 1.我们输入  cmd  之后进入的运行环境就是命令模式 2.在命令模式下输入  python,看到>>> ...

  10. oracle 10g 11g 12c区别

    oracle 10g 11g 12c区别