流程算法 本帖最后由 xuzuning 于 2014-07-04 21:16:48 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $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,) 有点点问题如果key=value就会死循环...不过这个可以让通过程序让key!=value 这个也会有死循环的问题$map = array( 1 => 11, 7 => 11, 8 => 7, 9 => 8, 10 => 11, 11 => 8, 12 => NULL); 你之前的结束条件是NULL,而你却写一个死循环的map,明显和约定的条件不同。如果死循环,那么结束条件是什么?是否出现循环就直接结束? 对的...直接出现循环就结束...我自己慢慢折腾出来咯..不是很好看$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); 关于php中输出标签时的一个疑惑 关于邮箱正则的问题 PHP分页遇到的问题 谁能告诉我为什么这行ob_start("ob_gzhandler")报错 寻找PHP生成HTML翻页代码 php xajx的loading显示问题~~~~ mysql数据库连接问题,总解决不了,请大家帮助 有谁知道用各种符号拼接出文字或简单图形的小工具.(可以放入Html里) javascript能读取sesssion变量的值吗? 在LINUX下安装PHP、APACHE、MYSQL无法成功,我快疯了。 php 删除目录 session_id()
$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,
)
有点点问题
如果key=value就会死循环...
不过这个可以让通过程序让key!=value
这个也会有死循环的问题
$map = array(
1 => 11,
7 => 11,
8 => 7,
9 => 8,
10 => 11,
11 => 8,
12 => NULL
);
如果死循环,那么结束条件是什么?是否出现循环就直接结束?
直接出现循环就结束...
我自己慢慢折腾出来咯..不是很好看
$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);