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.
  1.  include_once("connections/connections.php");  
  2.   
  3. for ($i=1; $i < ($eredmeny+1); $i++) {  
  4.      $termek_tomb[$i]=mysql_fetch_assoc($lekeres);  
  5.                                         }  
  6.                                           
  7. @$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>");  
  8. $eredmeny = mysql_num_rows($lekeres);  
  9.   
  10. $ZP_AIRPORTS = array(  
  11. for($k=1; $k < ($eredmeny+1); $k++) {  
  12.     "teszt" => array("city" => $termek_tomb[$k]["varos"], "name" => $termek_tomb[$k]["orszag"]),  
  13.   
  14.   }  
  15.   "AAC" => array("city" => "Magyarország""name" => "Budapest")  
  16. );  
 
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.
  1. $tomb = array();  
  2.   
  3. for($k=1; $k < 3; $k++) {  
  4.   $tomb[] = $k;  
  5. }  
  6.   
  7. print_r($tomb);  
  8. // 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 ))
  1.  $tomb = array();  
  2. for ($i=1; $i < ($eredmeny+1); $i++) {  
  3. $tomb[]["city"] = $termek_tomb[$i]["varos"];  
  4. $tomb[]["name"] = $termek_tomb[$i]["orszag"];  
  5. }  
  6.   
  7. print_r($tomb);   
3

indexek használata...

TeeCee · 2007. Már. 27. (K), 08.17
Naszóval:
  1. // ha egy rekordban ezek az adatok vannak:  
  2. // 'rovidites' = 'BP'  
  3. // 'city'      = 'Magyaroszág'  
  4. // 'name'      = 'Budapest'  
  5. // akkor:  
  6.   
  7. $tomb = array();  
  8. for ($i=1; $i < ($eredmeny+1); $i++) {  
  9.   $rovidites = $termek_tomb[$i]["rovidites"];  
  10.   $tomb$rovidites ]["city"] = $termek_tomb[$i]["varos"];  
  11.   $tomb$rovidites ]["name"] = $termek_tomb[$i]["orszag"];  
  12. }  
  13.   
  14. //Rövidebben:  
  15. $tomb = array();  
  16. for ($i=1; $i < ($eredmeny+1); $i++) {  
  17.   $tomb$termek_tomb[$i]["rovidites"] ]["city"] = array(  
  18.     'varos'  => $termek_tomb[$i]["varos"],  
  19.     'name' => $termek_tomb[$i]["orszag"]  
  20.     );  
  21. }  
  22.   
  23.   
  24. 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:
  1. $megye = array();  
  2.   
  3. for ($i=1; $i < ($eredmeny+1); $i++) {  
  4. if($ciklus_tomb[$i]["megye"] <= $megye){  
  5.   $megye[] = $ciklus_tomb[$i]["megye"];  
  6.   }  
  7. }  
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:
  1. $megye = array();  
  2.   
  3. for ($i=1; $i < ($eredmeny+1); $i++)  
  4. {  
  5.   if($ciklus_tomb[$i]["megye"] <= $megye)  
  6.   {  
  7.      $megyekod = $ciklus_tomb[$i]["megye"];  
  8.      $megye[$megyekod] = $megyekod;   // $megye["Pest"] = "Pest"  vagy megye[19] = 19  
  9.   }  
  10. }  
í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ó.
  1. <?php  
  2. $megye = array();  
  3. for ($i=1; $i < ($eredmeny+1); $i++) {  
  4.   $megye[$ciklus_tomb[$i]["megye"]] = $ciklus_tomb[$i]["megye"];  
  5. }  
  6. // Az IF sztem fölösleges ide, ha ugyanolyan kulcsú elemet veszel föl, ugyanolyan értékkel...  
  7. // sebességileg nemtudom, hogy melyik gyorsabb, de nekem nem volt gondom ilyennel,  
  8. // jóllehet ilyet csak tizen-rekord esetén műveltem  
  9.   
  10. //Másik megoldás lehetne:  
  11. for ($i=1; $i < ($eredmeny+1); $i++) {  
  12.   $megye[] = $ciklus_tomb[$i]["megye"];  
  13. }  
  14. $megye = array_fliparray_flip($megye) );  
  15. // 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  
  16. // cseréli, és kétszer átnyomva egy függvényt az eredeti tömbben lévő azonos értékek kipotyognak  
  17. // (mert az első flip után az azonos értékek kulcsai gyak. ugyanahhoz a kulcshoz kerülnek. )  
  18. ?>