二维数组的遍历,特定列(行)的选取

我们定义了这样一个数二位数组

 

  1. $myarrary=array("class_one"=>array("name"=>"小明"
  2.                                   "age"=>"13"
  3.                                   "sex"=>"M"), 
  4.                "class_two"=>array("name"=>"小军"
  5.                                   "age"=>"12"
  6.                                   "sex"=>"F"
  7.                ); 

该数组用表格表示是这样的:

class name age sex
class_one 小明 13 M
class_two 小军 12 F

如何遍历这个数组?

方法一:

  1. for($i=0;$i<count($myarrary;$i++){ 
  2.  
  3. echo $myarrary[$i][name]; 
  4.  

优点:结构简单,好理解适合初学者。

缺点:当键名是数字,尤其是数字不连续的情况时,在遍历的时候会遗漏一部分数组。比如我们定义了,一个如下的数组

  1. $myarrary=array("1"=>array("name"=>"小明"
  2.                                   "age"=>"13"
  3.                                   "sex"=>"M"), 
  4.                "3"=>array("name"=>"小军"
  5.                                   "age"=>"12"
  6.                                   "sex"=>"F"
  7.                ); 
class name age sex
1 小明 13 M
3 小军 12 F
  1. for($i=0;$i<count($myarrary);$i++){ 
  2.  
  3. echo $myarrary[$i][name]; 
  4.  

上述代码遍历的结果只有小明,所以我们应该采用第二种遍历的方式foreach!
方法二:

  1. foreach($myarrary as $value){ 
  2.     echo $value["name"]; 

从遍历基础上可以非常方便的经行数据读取和修改等操作。

如何选取其中的一列(一行)

比如选取上述数组中的age列。

方法一:

  1. $newarray=array_column($myarrary,'age'); 

array_column()函数需要PHP5.5支持。array_column() 返回myarrary数组中键值为age的列, 如果指定了可选参数index_key,那么myarrary数组中的这一列的值将作为返回数组中对应值的键。

如果PHP版本不到5.5可以使用第二种方法。

方法二:

  1. $newarrary=array_reduce($myarrary, create_function('$v,$w''$v[$w["age"]]=$w["age"];return $v;'));  

为了兼容不同的PHP版本可以使用如下的代码解决

  1. if (version_compare(PHP_VERSION, '5.5.0') >= 0) { 
  2.             $newarrary=array_column($myarrary,'id'); 
  3.         } 
  4.         else { 
  5.             $newarrary=array(); 
  6.             $newarrary=array_reduce($myarrary, create_function('$v,$w''$v[$w["age"]]=$w["age"];return $v;'));  
  7.          
  8.         } 

 

<<上一篇:记住选择,珍惜所有
本文发表于2016-01-17 21:20:26 阅读155846次
>>下一篇:臣臣宝贝
  • 【姜自杰】说: 1,初十之前,出一份试题,预习部分要简单。2,重做米表系统,以thinkphp为框架。 3,着手准备seo优化。 假期模式要玩的嗨。----2016-01-22 09:01:59

  • 验证码: recode
    姓 名(必须填写)
    email(必须填写)