PHP應用 一維陣列構建樹形陣列,用於商品分類

2021-06-23 03:17:51 字數 2964 閱讀 5378

由一維陣列,陣列中至少包含 id和pid兩個字段,來構建乙個樹形結構的陣列,用於構建分類樹。

class classifybuild

/*** 在陣列$arr一維上查詢是否 id 值和$id相同的值

* @param [array] $arr [結果陣列]

* @param [int] $id [要查詢的id值]

* @return [int|null] [如果存在,則返回該值對應的位置$key;否則,返回null]

*/private function search($id)

}return null;

} /**

* 在結果陣列中是否有 id值和$pid相同的值

* @param [array] $arr [結果陣列]

* @param [int] $pid [要查詢的pid值]

* @return [&$arr|&$pid] [如果存在,則返回結果陣列中查詢到的該值的引用;如果不存在,則返回$pid的引用]

*/private function updatearray(&$result, $arrtmp)

elseif (!empty($one['childrens']))

}} return false;

} public function make() elseif (!is_null($key)) else

/*** 將處理過的當前節點 $arrtmp 根據不同的情況更新到結果陣列中

*/if (0!=$arrtmp['pid'])

} else

} }/**

* 將需要插入的資料更新到結果陣列中

* @param [array] $arr [結果陣列]

* @param [array] $pushvalue [需要插入的陣列]

*/private function result_push(&$arr, $pushvalue)

else else

}$before = array_slice($arr, 0, $length);

$after = array_slice($arr, $length, count($arr)-$length);

$arr = array_merge($before, array($pushvalue), $after);

} }public function getresult()

}

$arrsource = array(

array(

'id'=>4,

'pid'=>1,

'sort'=>1

),array(

'id'=>6,

'pid'=>0,

'sort'=>8

),array(

'id'=>3,

'pid'=>1,

'sort'=>2

),array(

'id'=>12,

'pid'=>0,

'sort'=>3

),array(

'id'=>2,

'pid'=>1,

'sort'=>3

),array(

'id'=>13,

'pid'=>2,

'sort'=>2

),array(

'id'=>16,

'pid'=>4,

'sort'=>1

),array(

'id'=>5,

'pid'=>6,

'sort'=>3

),array(

'id'=>18,

'pid'=>2,

'sort'=>8

),array(

'id'=>15,

'pid'=>2,

'sort'=>0

),array(

'id'=>14,

'pid'=>12,

'sort'=>2

),array(

'id'=>17,

'pid'=>12,

'sort'=>1

),array(

'id'=>11,

'pid'=>12,

'sort'=>3

),array(

'id'=>1,

'pid'=>0,

'sort'=>2

),array(

'id'=>8,

'pid'=>7,

'sort'=>4

),array(

'id'=>10,

'pid'=>6,

'sort'=>8

),array(

'id'=>9,

'pid'=>6,

'sort'=>24

),array(

'id'=>7,

'pid'=>0,

'sort'=>82

),array(

'id'=>24,

'pid'=>20,

'sort'=>523

),array(

'id'=>26,

'pid'=>20,

'sort'=>2

),array(

'id'=>22,

'pid'=>20,

'sort'=>1

),array(

'id'=>20,

'pid'=>18,

'sort'=>6

),);

$classify = new classifybuild($arrsource);

$classify->sort = true;

$classify->make();

dump($classify->getresult());

字串陣列構建樹結構

源資料 let srclist 動物 昆蟲 螞蟻 動物 昆蟲 植物 草 綠色 植物 花 紅色 植物 花 黃色 去重分類 構建樹形資料如下 避免多根將每一條分類資訊路徑,視為容器陣列內的元素 使用固定指標記錄目標根位置,游標指標匹配節點,移動 新增節點之前判斷是否有同名節點存在,存在則進入其下層子節點...

基於C C 的二維動態陣列構建

本文對c c 中構建二維動態陣列的方法進行了總結,主要使用了malloc,calloc,new三種函式。二維動態陣列相當於每個元素為乙個指標的一維陣列,這個一維陣列就是行 每個指標又指向乙個儲存空間,這個儲存空間就是每一列。再通過使用malloc,calloc,new等函式為每個元素動態分配空間,就...

一維陣列應用

public class arraydemo system.out.println ch陣列的長度為 ch.length system.out.println intarray陣列的第2個元素為 intarray 1 system.out.println strarray陣列的第5個元素為 stra...