欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

流程算法

程序员文章站 2022-05-23 09:14:04
...
简单说明
我定义咯一个数组,
数组的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  $value) {                $reReturn[$key] = $a[$key];                $last = $value;        }        //将默认最后一位没有找到的值或者是不正确的下一级补进数组...(可以不需要这一步)        if (isset($a[$last])) {                $reReturn[$last] = $a[$last];        }}var_dump($reReturn);

支持自己动手的,呵呵。
先实现,再优化。

相关标签: 算法 流程