递归函数的用法及array_merge的用法

$info=M(‘navclass‘)->select();

function getAllArray($data, $pid =1) {
    $arr = array();
        foreach ($data as $v) {
        if($v[‘f_id‘]==$pid){
            $arr[] = $v[‘id‘];
             $arr = array_merge($arr, getAllArray($data,$v[‘id‘]));
        }
    }
    //foreach ($data as $k => $v) {
//        if ($v[‘f_id‘] == $pid) {
//            $v[‘child‘] = getAllArray($data, $v[‘id‘]);
//            $arr[] = $v;
//
//        }      此处为合并为数组
//    }
    return $arr;

}
 $info = getAllArray($info);

     print_r($info); 

PHP中合并数组分成两种情况

1、如果这两个数组中有相同的字符串键名:

$book1 = array(‘linux‘=>‘linux服务器配置与管理‘,‘php‘=>‘PHP程序设计‘);
 $book2 = array(‘linux‘=>‘服务器配置与管理‘,‘jsp‘=>‘PHP‘); 
  
 $result = array_merge($book1,$book2);
 print_r($result);
?>

输出为:

Array ( [linux] => 服务器配置与管理 [php] => PHP程序设计 [jsp] => PHP )

说明,后者将替换前者。但如果使用的是array_merge_recursive()则可保留,并作一个子数组存在。如:

$book1 = array(‘linux‘=>‘linux服务器配置与管理‘,‘php‘=>‘PHP程序设计‘);
 $book2 = array(‘linux‘=>‘服务器配置与管理‘,‘jsp‘=>‘PHP‘); 
  
 $result = array_merge_recursive($book1,$book2);
 print_r($result);
?>

输出为:

Array ( [linux] => Array ( [0] => linux服务器配置与管理 [1] => 服务器配置与管理 ) [php] => PHP程序设计 [jsp] => PHP )

2、如果这两个数组中有相同的数值键名:

$book1 = array(‘linux服务器配置与管理‘,‘PHP程序设计‘);
 $book2 = array(‘服务器配置与管理‘,‘PHP‘); 
  
 $result = array_merge($book1,$book2);
 print_r($result);
?>

结果是:

Array ( [0] => linux服务器配置与管理 [1] => PHP程序设计 [2] => 服务器配置与管理 [3] => PHP )

这时,如果数组中包含相同的数字键名,则后面的不会覆盖前面的值,而是后面的键值按顺序依次增加,附在后边。明白了吗,^_^

时间: 2024-11-06 07:44:25

递归函数的用法及array_merge的用法的相关文章

结构体定义 typedef struct 用法详解和用法小结

typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别在于:若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,struct node n;若用typedef,可以这样写,typedef struct node{}NODE; .在申请变量时就可以这样写,NODE n;区别就在于使用时,是否可以省去struct这个关键字. 第三篇:struct和typedef struct 分三块来讲述:1 首先:在C中定义一个结构体

js indexof用法indexOf()定义和用法

indexOf()定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法 stringObject.indexOf(searchvalue,fromindex) 参数 : searchvalue:必需.规定需检索的字符串值.可选的整数参数. fromindex:规定在字符串中开始检索的位置.它的合法取值是 0 到 stringObject.length - 1.如省略该参数,则将从字符串的首字符开始检索. 说明 该方法将从头到尾地检索字符串 stringOb

iOS中block的用法 以及和函数用法的区别

ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的block: int ^(MyBlock)(int,int) = ^(int a,int b){return a+b;} 调用MyBlock(5,6); 将block当作某个类的属性的写法 typedef void (^BlockOption)(); @property (nonatomic,ass

c#--foreach遍历的用法与split的用法

一. foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成.in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素.该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值.放到只读变量中去,如果括号中的整个表达式返回值为true,foreach块中的语句就能够执行.一旦集合中的元素都已经被访问到,整个表达式的值为false,控制流程就转入到foreach块后面的执行语句. foreach语句经常与数组一起使用,下面实例将通

兼容ie8 rgba()用法 滤镜filter的用法

原文  http://blog.csdn.net/westernranger/article/details/40836861 今天遇到了一个问题,要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如下的属性即可: background: rgba(255,255,255,.1); 但是要兼容到ie8.这个就有点蛋疼了.因为ie8不支持rgba()函数.下面我们总结一下rgba()函数的含义. rgba的含义,r代表red,g代表green,b代表blue,红绿蓝

1:CSS中一些@规则的用法小结 2: @media用法详解

第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule是一个声明,为CSS提供执行或怎么表现的指令.每个声明以@开头,后紧跟一个可用的关键字,这个关键字充当一个标识符,用于表示CSS该做什么.这是一个通用的语法,尽管每个at-rule有其它语法变体.常规规则 常规规则遵循下面的语法: 复制代码 代码如下: @[KEYWORD] (RULE); @charset

oracle case when 的用法 和 类似的用法 就是 如果A字段不为空 就用A字段;如果为空就用B字段

ID    REALNAME SEX 1  10082 松XX 2  10084 林XX     1 3  10087 西XX 4  10100 胡XX 5  10102 龙XX     1 用法============ select u.id,u.realname,( case u.sexwhen 1 then '男'when 2 then '女'else '空的'END) 性别from users u; ==== 第二种情况   如果A字段不为空 就用A字段:如果为空就用B字段 select

二十一、安装软件包的三种方法、RPM包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库

一.安装软件包的三种方法 rpm工具.yum工具.源码包 RPM工具:是以一种数据库记录的方式将需要的套件安装到Linux主机的一套管理程序.就是说,你的Linux系统中有一个关于RPM的数据库,它记录了安装的包以及包与包之间的依赖关系.RPM包是预先在Linux机器上编译并打包的文件,安装快捷.缺点:安装环境必须与编译时的环境一致或相当,包与包之间存在着相互依赖的情况,卸载包时需先把依赖的包卸载.若依赖的包是系统必需的,就不能卸载这个包,否则系统崩溃. yum工具:优势:可联网下载所需要的RP

Linux CentOS7 VMware 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库

一.安装软件包的三种方法 Linux下游三种安装方法,rpm工具.yum工具.源码包.rpm按装一个程序包时,有可能因为该程序包依赖另一个程序包而无法安装:yum工具,可以连同依赖的程序包一起安装. 二.rpm包介绍 rpm包是预先在Linux上编译并打包的文件,安装快捷. 缺点:安装环境必须预编译环境一致或相当:当宝与包之间存在着相互依赖,则卸载时必须先把依赖包卸载. 如果依赖的包是系统必须的,就不能卸载这个包,否则系统会崩溃. 如果虚拟机光驱中还有系统安装盘镜像,就可以通过执行命令把光驱挂载