php遞歸數組
1. php遞歸無限極分類怎麼弄
給個函數你,調用get_category()就是一個數組格式的結果
function get_category($parent_id=0){
$arr=array();
$sql = "select * from category where parent_id=$parent_id";//查詢子級數據
$result = array(a_object,b_object,,,)=sql_query($sql);//查詢結果一個數組或列表格式,自己完善。
if($result){
foreach($result as $re){//循環數組
if(get_category($re.id))//如果子級不為空
$re['child'] = get_category($re.id);
$arr[] = $re;
}
return $arr;
}
2. php遞歸出來的一維數組,怎麼合並成一個新的二維數組
我知道你要幹嘛,你想讓二級分類按pid歸類到相應的一級分類下面,這個好做。
你應該讓你的一維數組的的key為分類id的。這樣就方便多了。這里我就不把你的一維數組的key
foreach成id,我覺得你在得到這個一維數組時就可以做到。下面我默認成你的一維數組key為分類id。
<?php
$data = '你的一維數組';//這里懶得打
foreach($data as $key=>$vo){
if($vo['pid'] != 0){
unset($data[$key]);
$data[$vo['pid']]['list'][] = $vo;
}
}
print_r($data);
?>
3. PHP 無限級分類, 二維數組, 遞歸調用問題
$subs = array();
表示定義並初始化一個數組,
這樣後面的循環里就可以對這個數組進行操作,比如添加數據,
不加也能正常工作,但是不推薦,
初始化變數是一個良好的開發習慣
4. PHP怎麼遞歸
下面我舉一個其他的例子,雖然不是族譜,但是原理都是一樣的。
在一些復雜的系統中,要求對信息欄目進行無限級的分類,以增強系統的靈活性。那麼PHP是如何實現無限級分類的呢?我們在本文中使用遞歸演算法並結合mysql數據表實現無限級分類。
遞歸,簡單的說就是一段程序代碼的重復調用,當把代碼寫到一個自定義函數中,將參數等變數保存,函數中重復調用函數,直到達到某個條件才跳出,返回相應的數據。
Mysql
首先我們准備一張數據表class,記錄商品分類信息。表中有三個欄位,id:分類編號,主鍵自增長;title:分類名稱;pid:所屬上級分類id。
class表結構:
CREATE TABLE IF NOT EXISTS `class` (
`id` mediumint(6) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`pid` mediumint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
插入數據後,如圖:
如果要輸出json格式的數據,則可使用:
echo json_encode($list);
5. PHP 遞歸處理數組,並組合成新的數組
/**
*多維數組遞歸合並
*/
functionmultimerge(){
$arrs=func_get_args();
$merged=array();
while($arrs){
$array=array_shift($arrs);
if(!$array){
continue;
}
foreach($arrayas$key=>$value){
if(is_string($key)){
if(is_array($value)&&array_key_exists($key,$merged)&&is_array($merged[$key])){
$merged[$key]=call_user_func(__FUNCTION__,$merged[$key],$value);
}else{
$merged[$key]=$value;
}
}else{
$merged[]=$value;
}
}
}
return$merged;
}
$a1=array('user'=>array('name'=>'tony','score'=>23));
$a2=array('user'=>array('name'=>'tony','score'=>255),'name'=>'tom');
$a3=array('user'=>array('name'=>'tony','score'=>288,'test'=>'abc'),'name'=>'jack');
$result=multimerge($a1,$a2,$a3);
var_mp($result);