[英]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.