Portál AbcLinuxu, 10. května 2025 01:02
<?//------------------------------------------------------------------------------------------------------------------ $menu = array ( array(1,0), array(2,1), array(3,1), array(4,3), array(5,3), array(6,5), array(7,1), array(8,1), array(9,8), array(10,9), array(11,1), array(12,11), array(13,12), array(14,1), array(15,14), array(16,14), array(17,16), array(18,14), array(19,18), array(20,19), array(21,20), array(22,21), array(23,1) ); ##=========================================== $nodes = array(); foreach ($menu as $n) { if (!array_key_exists($n[1], $nodes)) { $nodes[$n[1]] = array(); } array_push($nodes[$n[1]],$n[0]); } function dict_value($nodes,$hledana){ # vrati parrenta hledane hodnoty 22 -> 21, atd. $keys = (array_keys($nodes)); #$values = (array_values($nodes)); $a = array(); $pocitadlo = 0; foreach ($keys as $key) { foreach ($nodes[$key] as $k) { if ($hledana == $k) { #var_dump($key); return $key; } } } } #=========================================== rekurzivni vyhledani cesty function cesta($nodes,$hledany_klic,$a=array()) { $lastval = dict_value($nodes,$hledany_klic); var_dump($lastval); echo "<br>"; array_push($a,$lastval); var_dump($a); # TADY JE: array(7) { [0]=> int(21) [1]=> int(20) [2]=> int(19) [3]=> int(18) [4]=> int(14) [5]=> int(1) [6]=> int(0) } echo "<br>"; if ($lastval != 0) { cesta($nodes,$lastval,$a); } return $a; } $hledany_klic = 22; $walk = array(); $walk = cesta($nodes,$hledany_klic); echo "<br>"; var_dump($walk); # TADY SE VRATI: array(1) { [0]=> int(21) } # OCEKAVAL BYCH: array(7) { [0]=> int(21) [1]=> int(20) [2]=> int(19) [3]=> int(18) [4]=> int(14) [5]=> int(1) [6]=> int(0) } ?>
Řešení dotazu:
import pdb
pdb.set_trace()
Popř. pokud máš instalovanej balíček ipython (daleko lepší debugger), tak
def debug(frame, frames_back):
if IPython.__version__ >= '0.11':
from IPython.core.debugger import Pdb
try:
ip = get_ipython()
except NameError:
from IPython.frontend.terminal.embed \
import InteractiveShellEmbed
ip = InteractiveShellEmbed()
colors = ip.colors
else:
from IPython.Debugger import Pdb
from IPython.Shell import IPShell
from IPython import ipapi
ip = ipapi.get()
if ip is None:
IPShell(argv=[''])
ip = ipapi.get()
colors = ip.options.colors
sys.excepthook = old_excepthook
if frame is None:
frame = sys._getframe(frames_back)
Pdb(colors).set_trace(frame)
debug()
Ta druhá fce je složitá (výňatek z kódu Sfepy http://sfepy.org/doc-devel/index.html), protože řeší různý verze,
IPythonu nicméně doporučuju si nějakou takovoudle funkci napsat/zkopčit a pak používat kde jen to jde...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.