曾经,那些如风一样的日子里,对array_merge、array_merge_recursive这两个函数一直属于是有概念,没实践的状态。偶然遇见这样一个面试问题:关于同key的情况,结果是怎么样的?
通过以下的例子,把这两个函数各执行一次,便可以充分理解这两个函数的概念。
<?php
/**
desc:数组合并
link:www.
date:2013/2/22
*/
$a = array( 'a' => 1, 'b' => 2 );
$b = array( 'b' => 3, 'd' => 4 );
//数组合并
$array_merge = array_merge( $a, $b );
echo '<pre>';
print_r( $array_merge );
//数组递归合并
$array_merge_recursive = array_merge_recursive( $a, $b );
print_r( $array_merge_recursive );
echo '</pre>';
?>
输出结果:
Array
(
[a] => 1
[b] => 3
[d] => 4
)
Array
(
[a] => 1
[b] => Array
(
[0] => 2
[1] => 3
)
[d] => 4
)
我们可以看出:
array_merge遇到同值的情况是第二个数组key覆盖第一个数组key,而array_merge_recursive函数则对同值数组采取了下标合并。
php 递归 无限级分类并返回数组的例子,有需发的朋友可以参考下。
<?php
/**
* 递归 无限级分类 返回数组
* link:www.
* date:2013/2/21
*/
$conn = mysql_connect('localhost','root','123456');
mysql_select_db('test');
mysql_query("set names 'utf8'");
function getCate($pid = 0)
{
$sql = "select * from cate where pid=".$pid;
$res = mysql_query($sql);
if($res)
{
while($row = mysql_fetch_assoc($res)){
$categories[] = $row;
}
}
if(0 < count($categories))
{
for($i = 0; $i < count($categories); $i++)
{
$categories[$i]['child'] = getCate($categories[$i]['id']);
}
}
return $categories;
}
//调用
$cate = getCate(0);
?>
php无限级分类的递归函数
php实现无限级缓存的类的扩展的代码
php与js制作的无限级可伸缩菜单
php与mysql实现的无限级分类
php把无限级分类生成数组的类
对ecshop中的无限级分类的分析
php写的无限级selectTree类
php用递归方法实现无限级分类的代码
首先,定义一个多个层级的数组。
1、首先是有键值对的数组;
2、其中部分只有值没有键;
/**
desc:数组
*/
$arr = array (
"1" => 'test',
'2' => 'me',
array (
"3" => "beij",
"4" => "zz"
),
"45",
array (
"5" => "5",
"6" => "ewrwer",
"7" => "ssss",
array (
"8" => "ssd",
"9" => "bdex"
),
"10",
"11"
)
);
?>
接下来,编写递归函数打印这个数组:
/**
desc:递归遍历数组
link:www.
date:2013/2/22
*/
function RecursiveArr($patten, $array) {
foreach ( $array as $value ) {
if (is_array ( $value )) {
$patten = $patten . $patten;
RecursiveArr ( $patten, $value );
} else {
echo "<p>" . $patten . "【" . key ( $array ) . "】" . ": " . $value . " <br/> " . "</p>";
<span ><strong>next ( $array ); // 给key赋值后需要移动到下一个,key才会更新</strong></span>
}
}
}
?>
调用示例:
出现下面图中的结果:
从上面的运行结果图可以看出,发现有些键是重复的。
为了比对区别和联系,接下来再看段代码:
/**
desc:递归遍历数组
link:www.
date:2013/2/22
*/
function RecursiveArr($patten, $array) {
foreach ( $array as $value ) {
if (is_array ( $value )) {
$patten = $patten . $patten;
RecursiveArr ( $patten, $value );
} else {
echo "<p>" . $patten . "【" . key ( $array ) . "】" . ": " . $value . " <br/> " . "</p>";
}
<span ><strong>next ( $array ); // 给key赋值后需要移动到下一个,key才会更新</strong></span>
}
}
如果我把之前的递归函数改成上面的code,运行结果图如下:
从上面的两种结果图应该可以看出一些什么了吧,亲。
说明:
若把next()函数使用在foreach中的if-else代码段中,则不同层级的顺序是可以记录和遵循的;
但如果把next()函数使用在foreach中的if-else代码段外的话,则顺序就是不区分层级直接递增的。
因此,如果需要针对键值进行处理,则需要格外的注意此处的变化,否则可能会让你像子弹一样飞...哈!