21,882
社区成员
发帖
与我相关
我的任务
分享
$a = array(
7 => 11,
1 => 11,
8 => 7,
9 => 8,
10 => 11,
11 => 8,
12 => NULL,
);
$firstID = 1;
$nextID = 11; //这里程序可以找到是11
//将第一位提前
$newReturnTemp[$firstID] = $nextID;
if (empty($nextID)) {
return array($a[$firstID]);
} else {
//重新组建数组,并让开始为为第一位
foreach ($a as $key => $value) {
$newReturnTemp[$key] = $value;
}
unset($key);
unset($value);
//获取数组的数目
$stepCount = count($a);
//提取所有键值
$stepArray = array_keys($newReturnTemp);
//让判断位为第一位
$temp = $firstID;
//组件要返回的数组第一位
$newnew[$firstID] = $nextID;
//将键值进行循环
for ($i = 0; $i < $stepCount; $i++) {
//默认从第一步开始,
if ($temp == $stepArray[$i]) {
//键值数组循环后面的值
for ($j = $i + 1; $j < $stepCount; $j++) {
//判断是否找到下一级的值,依据$a的内容
if ($newReturnTemp[$stepArray[$i]] == $stepArray[$j]) {
//找到值,写入需要返回的数组
$newnew[$temp] = $stepArray[$j];
//设定下一个判断值
$temp = $stepArray[$j];
//将键值循环的下一位与当前所返回的下一级值对换,并保证下一次判断是从下一级开始
$tt = $stepArray[$j];
$stepArray[$j] = $stepArray[$i + 1];
$stepArray[$i + 1] = $tt;
unset($tt);
}
}
}
}
//将返回排序好的数组,并依据排队内容一次取出相对应的数据,这里是用$a来做演示的...
foreach ($newnew as $key => $value) {
$reReturn[$key] = $a[$key];
$last = $value;
}
//将默认最后一位没有找到的值或者是不正确的下一级补进数组...(可以不需要这一步)
if (isset($a[$last])) {
$reReturn[$last] = $a[$last];
}
}
var_dump($reReturn);
$map = array(
1 => 7,
7 => 11,
8 => 7,
9 => 8,
10 => 11,
11 => 12,
12 => NULL
);
function getroad($map){
$key = 1;
$result = array();
while($key!=NULL){
$result[$key] = $map[$key];
$key = $map[$key];
}
return $result;
}
$result = getroad($map);
var_export($result);
array (
1 => 7,
7 => 11,
11 => 12,
12 => NULL,
)$a = array(
1 => 7,
7 => 11,
8 => 7,
9 => 8,
10 => 11,
11 => 12,
12 => NULL,
);
$i = 1;
while(isset($a[$i])) {
$r[$i] = $a[$i];
$i = $a[$i];
}
$r[$i] = $a[$i];
var_export($r);
array (