ugrás a tartalomhoz

Array és for ciklus egyben

chipi · 2007. Már. 26. (H), 16.41
Sziasztok!

Azt hogyan lehet megcsinálni, hogy egybeágyazni a tömböt és egy ciklust azaz a ciklus benne legyen.
 include_once("connections/connections.php");

for ($i=1; $i < ($eredmeny+1); $i++) {
     $termek_tomb[$i]=mysql_fetch_assoc($lekeres);
                                        }
                                        
@$lekeres=mysql_query( "SELECT * FROM orszagok $where ORDER BY $rendezes") or die ("<br><strong>Adatbázis olvasási hiba!<BR><a href='?'>[Javítás!]</a></strong>");
$eredmeny = mysql_num_rows($lekeres);

$ZP_AIRPORTS = array(
for($k=1; $k < ($eredmeny+1); $k++) {
    "teszt" => array("city" => $termek_tomb[$k]["varos"], "name" => $termek_tomb[$k]["orszag"]),

  }
  "AAC" => array("city" => "Magyarország", "name" => "Budapest")
);
 
1

utasítás =! változó

TeeCee · 2007. Már. 26. (H), 17.52
A kettőt kevered. Utasításokkal szokás változókat izélgetni, hogy más tartalommal rendelkezzenek.


$tomb = array();

for($k=1; $k < 3; $k++) {
  $tomb[] = $k;
}

print_r($tomb);
// Kimenete: array(1,2,3) (csak más formázásban)
2

Csak egy kicsit máshogyan

chipi · 2007. Már. 26. (H), 19.43
Köszi, ez sokat segítet, értem már az egészet, de azt nem ahogyan nekem elrendezi.

Nekem így kéne:
Array ( [BP] => Array ( [city] => Magyaroszág [name] => Budapest )
[TP] => Array ( [city] => Magyarország [name] => Tapolca ) )

De helyette ezt csinálja:
Array ( [0] => Array ( [city] => Magyaroszág )
[1] => Array ( [name] => Tapolca )

[2] => Array ( [city] => Magyarország )
[3] => Array ( [name] => Budapest ))
 $tomb = array();
for ($i=1; $i < ($eredmeny+1); $i++) {
$tomb[]["city"] = $termek_tomb[$i]["varos"];
$tomb[]["name"] = $termek_tomb[$i]["orszag"];
}

print_r($tomb); 
3

indexek használata...

TeeCee · 2007. Már. 27. (K), 08.17
Naszóval:


// ha egy rekordban ezek az adatok vannak:
// 'rovidites' = 'BP'
// 'city'      = 'Magyaroszág'
// 'name'      = 'Budapest'
// akkor:

$tomb = array();
for ($i=1; $i < ($eredmeny+1); $i++) {
  $rovidites = $termek_tomb[$i]["rovidites"];
  $tomb[ $rovidites ]["city"] = $termek_tomb[$i]["varos"];
  $tomb[ $rovidites ]["name"] = $termek_tomb[$i]["orszag"];
}

//Rövidebben:
$tomb = array();
for ($i=1; $i < ($eredmeny+1); $i++) {
  $tomb[ $termek_tomb[$i]["rovidites"] ]["city"] = array(
    'varos'  => $termek_tomb[$i]["varos"],
    'name' => $termek_tomb[$i]["orszag"]
    );
}


print_r($tomb);
4

De csak egy legyen a tömbben

chipi · 2007. Ápr. 16. (H), 21.23
Olyat hogyan lehet a tömbnek megmondani, hogy csak 1 szer szerepeljen a tömbben minden érték.
Azaz:
$megye = array();

for ($i=1; $i < ($eredmeny+1); $i++) {
if($ciklus_tomb[$i]["megye"] <= $megye){
  $megye[] = $ciklus_tomb[$i]["megye"];
  }
}
Mert a megyéket mindig berakja, és vagy egy rakat ugyan olyan megye benne. De nekem a tömbbe egy kell csak, és nem jó amit írtam ellenőrzést hozzá :(
5

[] -operátor

razielanarki · 2007. Ápr. 16. (H), 23.49
ha a $megye[] = valami módon töltöd fel a tömbjeidet akkor a php mindig létrehoz egy új elemet a tömb végén (ez volt a gond a 2ik hozzászólásodban is: 2 új elem jött létre a []["varos"] és []["orszag"] tárolására.

ehhez a problámához (4-es hsz)
a, ajánlom az in_array() fgv-t
b, vagy töltsd fel a tömböt a köv módon:
$megye = array();

for ($i=1; $i < ($eredmeny+1); $i++)
{
  if($ciklus_tomb[$i]["megye"] <= $megye)
  {
     $megyekod = $ciklus_tomb[$i]["megye"];
     $megye[$megyekod] = $megyekod;   // $megye["Pest"] = "Pest"  vagy megye[19] = 19
  }
}
így a tömböd a megyekód alapján lesz indexelve és minden kulcs csak 1x szerepel.
6

... DISTINCT?

TeeCee · 2007. Ápr. 17. (K), 08.02
Nem tudjuk, mi az SQL-ed. Ha csak a megyéket pakolod bele egy lekérdezésből, akkor használd a DISTINCT-et, azzal biztosan nem kapsz két egyforma rekordot.
Ha más is van (pl: város, megye, IRSZ), akkor ez nem használható.

<?php
$megye = array();
for ($i=1; $i < ($eredmeny+1); $i++) {
  $megye[$ciklus_tomb[$i]["megye"]] = $ciklus_tomb[$i]["megye"];
}
// Az IF sztem fölösleges ide, ha ugyanolyan kulcsú elemet veszel föl, ugyanolyan értékkel...
// sebességileg nemtudom, hogy melyik gyorsabb, de nekem nem volt gondom ilyennel,
// jóllehet ilyet csak tizen-rekord esetén műveltem

//Másik megoldás lehetne:
for ($i=1; $i < ($eredmeny+1); $i++) {
  $megye[] = $ciklus_tomb[$i]["megye"];
}
$megye = array_flip( array_flip($megye) );
// Ez itt igazából fölösleges, de talán még hasznát veszed máshol: az array_flip a kulcsokat és értékeket
// cseréli, és kétszer átnyomva egy függvényt az eredeti tömbben lévő azonos értékek kipotyognak
// (mert az első flip után az azonos értékek kulcsai gyak. ugyanahhoz a kulcshoz kerülnek. )
?>