我有一个看起来像这样的多维数组: 基于我的目录中的类别ID索引基础数组。
$cat[category_id]
每个基础数组都有三个基础元素:
['parent_id']
['sort_order']
['name']
我想创建一个函数,允许我们以正确的排序顺序为给定的parent_category_id创建category_id和名称列表。这可能吗?从技术上讲,它是相同的信息,但数组以奇怪的方式构造以提取该信息。
以下是数组的示例定义:
$cat = array();
$cat[32]['parent_id']= 0;
$cat[32]['sort_order']= 1;
$cat[32]['name']= 'my-category-name1';
$cat[45]['parent_id']= 0;
$cat[45]['sort_order']= 0;
$cat[45]['name']= 'my-category-name2';
$cat[2]['parent_id']= 0;
$cat[2]['sort_order']= 2;
$cat[2]['name'] = "my-category-name3";
$cat[3]['parent_id']= 2;
$cat[3]['sort_order']= 1;
$cat[3]['name'] = "my-category-name4";
$cat[6]['parent_id']= 2;
$cat[6]['sort_order']= 0;
$cat[6]['name'] = "my-category-name5";
答案 0 :(得分:3)
假设它是这种东西:
$ary = Array(
0 => Array(
'parent_category_id' => null,
'sort_order' => 0,
'name' => 'my-category-name0'
),
1 => Array(
'parent_category_id' => 0,
'sort_order' => 1,
'name' => 'my-category-name1'
),
2 => Array(
'parent_category_id' => 0,
'sort_order' => 2,
'name' => 'my-category-name2'
),
3 => Array(
'parent_category_id' => null,
'sort_order' => 0,
'name' => 'my-category-name3'
),
4 => Array(
'parent_category_id' => 3,
'sort_order' => 0,
'name' => 'my-category-name4'
)
);
您可以结合foreach和usort来实现您的目标。
// @array: the array you're searchign through
// @parent_id: the parent id you're filtering by
function getFromParent($array, $parent_id){
$result = Array();
foreach ($array as $category_id => $entry){
if ($entry['parent_category_id']===$parent_id)
$result[$category_id] = $entry;
}
usort($result,create_function('$a,$b','return ($a["sort_order"]>$b["sort_order"]?1:($b["sort_order"]<$a["sort_order"]?-1:0));'));
return $result;
}
var_export(getFromParent($ary,0));
编辑抱歉,修正了一些语法错误。经过测试和工作(至少可以达到我想要的目的)
EDITv2 以下是上述原始输出:
array (
0 =>
array (
'parent_category_id' => 0,
'sort_order' => 1,
'name' => 'my-category-name1',
),
1 =>
array (
'parent_category_id' => 0,
'sort_order' => 2,
'name' => 'my-category-name2',
),
)
(仅用于@FelixKling的var_export)
EDITv3 我已经更新了我的答案以配合OP的更新。我现在也使它在结果数组中保留原始的“category_id”值。
答案 1 :(得分:0)
首先创建一个空数组,它将用于存储结果。
$result = array();
您需要遍历初始数组,可以使用foreach()
。
然后,如果您的parent_category_id
只是使用if
语句来检查它是否是给定的ID。
如果是,只需构建并将结果推送到$result
数组。
使用您喜欢的任何sort functions
使用魔法return $result;
你已经完成了。
答案 2 :(得分:0)
function returnSortedParents($categories, $target_parent){
$new_list = array();
foreach($categories as $index => $array){
//FIND ONLY THE ELEMENTS MATCHING THE TARGET PARENT ID
if($array['parent_category_id']==$target_parent){
$new_list[$index = $array['sort_order'];
}
return asort($new_list); //SORT BASED ON THE VALUES, WHICH IS THE SORTING ORDER
}