二维数组的遍历,特定列(行)的选取
发表于2016-01-17 21:20:26阅读155858次
我们定义了这样一个数二位数组
- $myarrary=array("class_one"=>array("name"=>"小明",
- "age"=>"13",
- "sex"=>"M"),
- "class_two"=>array("name"=>"小军",
- "age"=>"12",
- "sex"=>"F")
- );
该数组用表格表示是这样的:
class | name | age | sex |
class_one | 小明 | 13 | M |
class_two | 小军 | 12 | F |
如何遍历这个数组?
方法一:
- for($i=0;$i<count($myarrary;$i++){
- echo $myarrary[$i][name];
- }
优点:结构简单,好理解适合初学者。
缺点:当键名是数字,尤其是数字不连续的情况时,在遍历的时候会遗漏一部分数组。比如我们定义了,一个如下的数组
- $myarrary=array("1"=>array("name"=>"小明",
- "age"=>"13",
- "sex"=>"M"),
- "3"=>array("name"=>"小军",
- "age"=>"12",
- "sex"=>"F")
- );
class | name | age | sex |
1 | 小明 | 13 | M |
3 | 小军 | 12 | F |
- for($i=0;$i<count($myarrary);$i++){
- echo $myarrary[$i][name];
- }
上述代码遍历的结果只有小明,所以我们应该采用第二种遍历的方式foreach!
方法二:
- foreach($myarrary as $value){
- echo $value["name"];
- }
从遍历基础上可以非常方便的经行数据读取和修改等操作。
如何选取其中的一列(一行)
比如选取上述数组中的age列。
方法一:
- $newarray=array_column($myarrary,'age');
array_column()函数需要PHP5.5支持。array_column() 返回myarrary数组中键值为age的列, 如果指定了可选参数index_key,那么myarrary数组中的这一列的值将作为返回数组中对应值的键。
如果PHP版本不到5.5可以使用第二种方法。
方法二:
- $newarrary=array_reduce($myarrary, create_function('$v,$w', '$v[$w["age"]]=$w["age"];return $v;'));
为了兼容不同的PHP版本可以使用如下的代码解决
- if (version_compare(PHP_VERSION, '5.5.0') >= 0) {
- $newarrary=array_column($myarrary,'id');
- }
- else {
- $newarrary=array();
- $newarrary=array_reduce($myarrary, create_function('$v,$w', '$v[$w["age"]]=$w["age"];return $v;'));
- }