流程算法 本帖最后由 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加密解密,为何我总是显示乱码 大家好,我们想做一个网站,价格4000元,有谁愿意的请联系我!!! 关于require和include的区别 奇怪,奇怪。PHP+SMARTY时出现了一个奇怪的问题! 我现在想做个简单的测试PHP与SQL SERVER2000 数据库例子,要求能显示数据库中一表(TBLE1,T1,T2为此字段)到页面?在线等 向大家请教关于mysql_query的问题? 怎么取得中间一部份的值呢?高难度。快进来看看吧 求教在php程序中调用mysqldump问题 一个基础编程,谢谢啦! 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);