您好,欢迎访问一九零五行业门户网

流程算法

简单说明
我定义咯一个数组,
数组的key表示当前步的id,下一步的id对应的value...
我要生成一个这个新的数组
例子:
array(1 => int 7
  7 => int 11
  8 => int 7
  9 => int 8
  10 => int 11
  11 => int 12
  12 => null
)
结果就是
array(
1=>7
7=>11
11=>12
12=>null
)
当前知道开头位为1.
求算法...
回复讨论(解决方案) $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 (
1 => 7,
7 => 11,
11 => 12,
12 => null,
)
$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 (
1 => 7,
7 => 11,
11 => 12,
12 => null,
)
有点点问题
如果key=value就会死循环...
不过这个可以让通过程序让key!=value
$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,
)
这个也会有死循环的问题
$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 $value) { $rereturn[$key] = $a[$key]; $last = $value; } //将默认最后一位没有找到的值或者是不正确的下一级补进数组...(可以不需要这一步) if (isset($a[$last])) { $rereturn[$last] = $a[$last]; }}var_dump($rereturn);
支持自己动手的,呵呵。
先实现,再优化。
其它类似信息

推荐信息