
php 面试遇到一个问题,思考出了一点门道,但是不知道该怎么写这个函数!
class前面的数字应该是对应的层级,id前面的数字,应该是就是这个ID,写出那个效果应该用什么?递归么?但是不知道怎么归!!$arr=[['1_class'=>'a',...
class 前面的数字应该是对应的层级,id前面的数字,应该是就是这个ID,写出那个效果应该用什么?递归么? 但是不知道怎么归!!$arr = [ [ '1_class'=>'a', '2_class'=>'b', '3_class'=>'c', '1_id'=>1, '2_id'=>2, '3_id'=>3, ], [ '1_class'=>'a', '2_class'=>'b', '1_id'=>1, '2_id'=>2, ], [ '1_class'=>'aa', '2_class'=>'bb', '3_class'=>'cc', '1_id'=>11, '2_id'=>22, '3_id'=>33, ],];
展开
3个回答
展开全部
看要求转换前和转换后的结构都有些不实用,野路子。按字面写了..
<?php //ver.>5.4.0
$arr = [
['1_class'=>'a', '2_class'=>'b', '3_class'=>'c',
'1_id'=>1, '2_id'=>2, '3_id'=>3 ],
['1_class'=>'a', '2_class'=>'b', '1_id'=>1, '2_id'=>2, ],
['1_class'=>'aa', '2_class'=>'bb', '3_class'=>'cc',
'1_id'=>11, '2_id'=>22, '3_id'=>33] ];
$o=[];
foreach($arr as $rec){
$i=1; $clsKey=$i.'_class'; $cur=&$o;
while(array_key_exists($clsKey, $rec)) {
$eid=$rec[$i.'_id'];
if(!array_key_exists($clsKey, $cur))
$cur[$eid]=['value' =>$eid, 'label'=>$rec[$clsKey], 'children'=>[]];
$i++; $clsKey=$i.'_class';
$cur=&$cur[$eid]['children'];
}
}
echo '<pre>'.print_r($o,true).'</pre>';
Array
(
[1] => Array
(
[value] => 1
[label] => a
[children] => Array
(
[2] => Array
(
[value] => 2
[label] => b
[children] => Array
(
)
)
)
)
[11] => Array
(
[value] => 11
[label] => aa
[children] => Array
(
[22] => Array
(
[value] => 22
[label] => bb
[children] => Array
(
[33] => Array
(
[value] => 33
[label] => cc
[children] => Array
(
)
)
)
)
)
)
)
展开全部
看不懂啊兄弟
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//这么简单都不会?
function get_children($value,$lv=1) {
$lv ++;
if($value[$lv.'_class']){
$res = [
'value'=>$value[$lv.'_id'],
'label'=>$value[$lv.'_class'],
'children'=>$this->get_children($value,$lv),
];
return $res;
}else{
return [];
}
}
$arr = [
[ '1_class'=>'a', '2_class'=>'b', '3_class'=>'c', '1_id'=>1, '2_id'=>2, '3_id'=>3, ],
[ '1_class'=>'a', '2_class'=>'b', '1_id'=>1, '2_id'=>2, ],
[ '1_class'=>'aa', '2_class'=>'bb', '3_class'=>'cc', '1_id'=>11, '2_id'=>22, '3_id'=>33, ]
];
$newlist = [];
foreach($arr as $val){
if($val['1_class']){
$newlist[] = [
'value'=>$val['1_id'],
'label'=>$val['1_class'],
'children'=>get_children($val,1),
];
}
}
var_dump($newlist);exit;
追答
$arr = [
[ '1_class'=>'a', '2_class'=>'b', '3_class'=>'c', '1_id'=>1, '2_id'=>2, '3_id'=>3, ],
[ '1_class'=>'a', '2_class'=>'b', '1_id'=>1, '2_id'=>2, ],
[ '1_class'=>'aa', '2_class'=>'bb', '3_class'=>'cc', '1_id'=>11, '2_id'=>22, '3_id'=>33, ]
];
$newlist = [];
foreach($arr as $val){
if($val['1_class']){
$newlist[$val['1_class']]['value'] = $val['1_id'];
$newlist[$val['1_class']]['label'] = $val['1_class'];
$newlist[$val['1_class']]['children'][] = $this->get_children($val,1);
}
}
var_dump($newlist);exit;
//多一层套路就不会了? 老师教会你10以内的加法运算,还要教你100以内加法运算?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |