Portál AbcLinuxu, 10. května 2025 01:02

Dotaz: PHP pomoc s debugem

18.5.2015 14:30 2012 | skóre: 16 | blog: co_me_dneska_napadlo
PHP pomoc s debugem
Přečteno: 180×
Odpovědět | Admin
Zdravim, jeden muj php skript nedela, co bych od nej ocekaval. Uz do toho koukam docela dlouho a nejak jsem ze na tom zasekl. Poradi nekdo?
<?//------------------------------------------------------------------------------------------------------------------
$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:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (2012 (tazatel))
18.5.2015 14:56 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: PHP pomoc s debugem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jenom tak v rychlosti koukám, cesta voláš rekurzivně, ale nic s výsledkem neděláš, takže ti to může vypsat něco jiného, než ten tvůj dump.
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
18.5.2015 15:03 2012 | skóre: 16 | blog: co_me_dneska_napadlo
Rozbalit Rozbalit vše Re: PHP pomoc s debugem
jee diky, ja vedel ze to bude nejaka trivialita :-)
19.5.2015 10:20 logik
Rozbalit Rozbalit vše Re: PHP pomoc s debugem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, příště si poraď pomocí

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...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.