簡體   English   中英

如何重寫python程序:二維數組foreach

[英]How to rewrite python program: foreach of two-dimensional array

人。 我這里有個大問題:hehe

我正在嘗試將代碼從python重寫為php,但我陷入其中。

我正在創建稱為“圖形|深度優先搜索”的算法

Python代碼可以正常運行,PHP不能。

balti = gretimumosarasas   
pilki = []                    
juodi = []


balti.insert(0,0)      

v0 = int(input("Insert first point: "))   
vg = int(input("Insert last point: "))  
print ("")
#Depth first search

for i in balti[v0]:         
    pilki.append(i)

juodi.append(v0)            
print("pilki liko", pilki) 
while (len(pilki) != 0) :   
    for x in pilki[:1]:     
        print ("tikrinu", x)    
        if vg == x:            
            print("yra!")       
            print("Kelias tarp ", v0, " ir ", vg, " egzistuoja!")
            pilki = []          
        else:                   
            for i in balti[x]:  
                if i not in pilki:  
                    if i not in juodi: 
                        pilki.append(i)
                        print("pridedu", i) 
            pilki.remove(x)     
            print ("pilki liko", (pilki))   
            juodi.append(x)     
            if len(pilki) == 0: 
                print ("Nera")  
                print("Kelias tarp ", v0, " ir ", vg, " neegzistuoja!")

gretimumosarasas是:

[[2, 3], [1, 4, 5], [1, 6], [2], [2], [3], []]

我被困在這個地方

for i in balti[x]:  
            if i not in pilki:  
                if i not in juodi:
                    pilki.append(i) 
                    print("pridedu", i)

不知道如何使帶有索引的二維數組foreach循環,因為總是會收到通知,錯誤或永遠循環。

我將此程序的代碼編寫為PHP:

$balti = $gretimumosarasas;
$pilki = array();
$juodi = array();
array_unshift($balti, '0');
?>
<form action="" method="post">
  Pradinė viršūnė: <input name="v0" type="text" />
  Galutinė viršūnė: <input name="vg" type="text" />
  <input name="submit" type="submit" value="Vykdyti"/>
</form>
<?php
if (isset($_POST['submit'])) {
    $v0 = $_POST['v0'];
    $vg = $_POST['vg'];

  foreach ($balti[$v0] as &$value) {
    array_push($pilki, $value);
  }
    echo"</br>";
    array_push($juodi, $v0);
    echo "Pilki liko: ";
    foreach ($pilki as $key => $val) {
    echo $val." ";
    }
    echo "</br>";
    $output = array_slice($pilki, 0, 1);
    while(count($pilki) != 0) {
        foreach ($output as $key => $value){
            echo "Tikrinu: ".$value."</br>";
            if ($vg == $value){
                echo "Yra!";
                print "Kelias tarp ".$v0." ir ".$vg." egzistuoja!";
                unset($pilki);
                $pilki=array();
            } else {
                foreach($balti as $arr){
                    if (!in_array($arr[$x], $pilki)) {
                        if (!in_array($arr[$x], $juodi)){
                            array_push($pilki, $arr[$x]);
                            echo "pridedu".$arr[$x];
                        }
                    }
                }



                $key = array_search($pilki[$x], $pilki);
                unset($pilki[$key]);

                echo "Pilki liko: ";
                foreach ($pilki as $key => $val) {
                    echo $val." ";
                }
                array_push($juodi, $pilki[$key]);
                if (count($pilki) == 0){
                    echo "Nėra!";
                    print "Kelias tarp ".$v0." ir ".$vg." neegzistuoja!";
                }
            }
        }
    }
}

echo "</br></br></br>";
print_r($juodi);

但是它不能正常工作。 請給我提示錯誤的提示,並幫助修復此代碼。

正確的輸出將是:

[0, [2, 3], [1, 4, 5], [1, 6], [2], [2], [3], []]
pilki liko [2, 3]
tikrinu 2
pridedu 4
pridedu 5
pilki liko [3, 4, 5]
tikrinu 3
pridedu 6
pilki liko [4, 5, 6]
tikrinu 4
pilki liko [5, 6]
tikrinu 5
pilki liko [6]
tikrinu 6
yra!
Kelias tarp  1  ir  6  egzistuoja!

尊敬的Justas。

主要錯誤在於這部分

foreach($balti as $arr){
    if (!in_array($arr[$x], $pilki)) {
        if (!in_array($arr[$x], $juodi)){
            array_push($pilki, $arr[$x]);
            echo "pridedu".$arr[$x];
        }
    }
}

$key = array_search($pilki[$x], $pilki);
unset($pilki[$key]);

echo "Pilki liko: ";
foreach ($pilki as $key => $val) {
    echo $val." ";
}
array_push($juodi, $pilki[$key]);
if (count($pilki) == 0){
    echo "Nėra!";
    print "Kelias tarp ".$v0." ir ".$vg." neegzistuoja!";
}
  • 您使用了未定義的變量$x

  • 您還遍歷了整個$balti數組,而不是遍歷數組的[ $value ]索引/鍵,即$balti

  • 彈出$pilki[key]$pilki丟失了數組的元素,因此其大小減小了。

  • 在這種情況下,如果在彈出后引用$pilki[key] ,則它將指向數組的另一個元素。
  • 因此,您可能必須將$pilki[key]存儲在一個臨時變量中,然后將其追加/插入到$juodi數組中。

這應該工作正常! 了點功夫! 😅)

<?php
    $balti = array(
        array(2, 3),
        array(1, 4 ,5),
        array(1, 6),
        array(2),
        array(2),
        array(3),
        array(),
    );
    $pilki = array();
    $juodi = array();
    array_unshift($balti, 0);
?>
<form action="index.php" method="post">
  Pradinė viršūnė: <input name="v0" type="text" />
  Galutinė viršūnė: <input name="vg" type="text" />
  <input name="submit" type="submit" value="Vykdyti"/>
</form>
<?php
if (isset($_POST['submit'])) {
    $v0 = $_POST['v0'];
    $vg = $_POST['vg'];

  foreach ($balti[$v0] as $value) {
    array_push($pilki, $value);
  }
    echo"</br>";
    array_push($juodi, $v0);
    echo "Pilki liko: ";
    foreach ($pilki as $val) {
    echo $val." ";
    }
    echo "</br>";
    while(count($pilki) != 0) {
        $output = array_slice($pilki, 0, 1);
        foreach ($output as $key => $value){
            echo "Tikrinu: ".$value."</br>";
            if ($vg == $value){
                echo "Yra!";
                print "Kelias tarp ".$v0." ir ".$vg." egzistuoja!";
                unset($pilki);
                $pilki=array();
            }
            else {
                foreach($balti[$value] as $x){
                    if (!in_array($x, $pilki)) {
                        if (!in_array($x, $juodi)){
                            array_push($pilki, $x);
                            echo "pridedu ".$x."<br>";
                        }
                    }
                }



                $key = array_search($value, $pilki);
                $pilkitemp = $pilki[$key];
                unset($pilki[$key]);

                echo "Pilki liko: ";
                foreach ($pilki as $key => $val) {
                    echo $val." ";
                }
                echo "<br>";
                array_push($juodi, $pilkitemp);
                if (count($pilki) == 0){
                    echo "Nėra!";
                    print "Kelias tarp ".$v0." ir ".$vg." neegzistuoja!";
                }
            }
        }
    }
}

echo "</br></br></br>";
print_r($juodi);
?>

輸出 :- 輸出圖像

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM