ugrás a tartalomhoz

Tömb elem beillesztés hiba

lecroix.y · 2014. Jún. 18. (Sze), 12.23

$pieces = explode("/", $ut);
$mennyi = count($pieces)-1;
for($cc=1; $cc<=$mennyi; $cc++)
{
    echo "<br />";
	
    for($szamlalo=1; $szamlalo<=$cc; $szamlalo++)
		
	{			
		echo "/" . $pieces[$szamlalo];
        $tomb2[] = $pieces[$szamlalo];// ITT VAN A HIBA
    }
	
		
}
Sziasztok!

A probléma egyszerű: a $tomb2 nevű tömb csak a legutolsó elemet tartalmazza. De miért?

A felette levő echo rendesen kiírja egymás után a kívánt sztringet...
Előtte van egy ugyanilyen for ciklusom, az pedig jó...

Kinek van ötlete?
 
1

Tömb

Poetro · 2014. Jún. 18. (Sze), 12.40
Az első ciklus előtt a $tomb2 inicializálva lett, mint üres tömb? Mondjuk
$tomb2 = array();
Mondjuk azt sem értem, miért van egyáltalán szükség a második ciklusra? Miért nem csinálod egyszerűen tömb műveletekkel és implode-dal?
2

Igen, létrehoztam a

lecroix.y · 2014. Jún. 18. (Sze), 12.54
Igen, létrehoztam a tömböt.

Maga a script egy könyvtár navigációs cucc. Az első tömbhöz hozzáfűzi a href-et(második tömb).

Az egyik ciklus ezt rakja tömbbe:

/elso_mappa
/masodik_mappa
/harmadik_mappa

A problémás ciklus pedig ezt:
/elso_mappa
/elso_mappa/masodik_mappa
/elso_mappa/masodik_mappa/harmadik_mappa

Ez lenne a href értéke.

Azt nem értem, hogyha kiírja a cuccot, akkor miért nem teszi bele a tömbbe is?
3

Honnan tudod?

zzrek · 2014. Jún. 18. (Sze), 13.35
Honnan tudod, hogy tényleg nem teszi a tömbbe? Kirakhatod echo-val a 12. sorban a tömb hosszát vagy az új elemét is, hogy meggyőződj róla, tényleg benne van.
Lehet, hogy utólag tűnik el belőle, vagy amit lekérsz később, az nem az a bizonyos tömb, esetleg azelőtt kéred le, mielőtt ez a ciklus lefutna.
4

Ötlet

Endyl · 2014. Jún. 18. (Sze), 13.38
A fenti kódot kicsit módosítva futtatva nekem a következő kimenetet generálja:
<?php
header('Content-type: text/plain; charset=UTF-8');

$ut = "/egy/ketto/harom/negy";
$pieces = explode("/", $ut);
$mennyi = count($pieces)-1;

for($cc=1; $cc<=$mennyi; $cc++) {
    for($szamlalo=1; $szamlalo<=$cc; $szamlalo++) {
        echo "/" . $pieces[$szamlalo];
        $tomb2[] = $pieces[$szamlalo];
    }
	echo "\n";
}

echo "\n", print_r($tomb2, true);
/egy
/egy/ketto
/egy/ketto/harom
/egy/ketto/harom/negy

Array
(
    [0] => egy
    [1] => egy
    [2] => ketto
    [3] => egy
    [4] => ketto
    [5] => harom
    [6] => egy
    [7] => ketto
    [8] => harom
    [9] => negy
)
Ez nekem nem tűnik hibásnak, minden egyes elem bekerül a tömbbe, nem csak az utolsó.

Viszont a kettesben írt válaszod alapján úgy vélem, nem azt rakod a tömbbe, amit gondolsz, hogy teszel, vagy amit szeretnél. Úgy tűnik, azt szeretnéd csinálni, hogy a belső ciklusban összefűzöd az egyes értékeket, majd a külső ciklusban, a belső ciklus után ezt az értéket csapod hozzá $tomb2-höz. A külső ciklus elején ne felejtsd el visszaállítani az összefűzött értéket tároló változót.

De ez egy ciklussal is megoldható lenne, ha az aktuális elem elé beszúrod az előzőleg beszúrt értéket.

Gyorsabb problémamegoldáshoz ajánlom az egyszerű hibakeresés cikket, illetve a kérdésfeltevésen is van mit csiszolni (például az adott bemenő adatra az elvárt és hibás kimenetek leírása).
5

1: Valóban jogosak a

lecroix.y · 2014. Jún. 18. (Sze), 13.59
1: Valóban jogosak a kritikák. Legközelebb pontosítok a címen.

2: Tényleg ezt szeretném:
1 -> 1
2 -> 1/2
3 -> 1/2/3

A probléma, hogyha az egy/ketto/harom kiíráskor 1 elem, akkor hogyan lesz belőle 3?
6

Kiíráskor sem egy elem, csak

Endyl · 2014. Jún. 18. (Sze), 14.54
Kiíráskor sem egy elem, csak amíg nem szúrsz be sortörést, addig egymás után írja és így egynek tűnik. Kicsit jobban el kéne mélyedni még az alapokban, ha ez gondot okoz.

Fentebb már írtam a megoldást. A külső ciklus minden futásának elején inicializálsz egy üres változót. A belső ciklusban ehhez fűzöd hozzá az egyes elemeket. A külső ciklusban, a belső ciklus után, hozzácsapod a változó tartalmát $tomb2-höz.

Vagy $tomb2 tartalmát úgy állítod elő, hogy egy ciklusod van, amiben első iterációban hozzáadod $tomb2-höz az aktuális értéket, majd minden további iterációban összefűzöd az előzőleg beszúrt elemet és az aktuális értéket és ezt adod hozzá $tomb2-höz.
7

Na igen...

lecroix.y · 2014. Jún. 18. (Sze), 19.37
A google hosszas böngészése után sem látom át, hogy végül is melyik függvény az enyém...

Nem a megoldást várom, de vajon melyik függvény irányába induljak el, hogy egy kulcshoz több értéket tudjak rendelni?
8

Array ( [elso] => Array

lecroix.y · 2014. Jún. 18. (Sze), 19.41
Array
(
[elso] => Array
(
[0] => elso
[1] => masodik
)
)

gondolom valami ilyesmi lenne...
9

Túlbonyolítod

Endyl · 2014. Jún. 18. (Sze), 19.52
A külső ciklus minden futásának elején inicializálsz egy üres változót. A belső ciklusban ehhez fűzöd hozzá az egyes elemeket. A külső ciklusban, a belső ciklus után, hozzácsapod a változó tartalmát $tomb2-höz.


Ezt írd át php-re, és kész.
10

"... a kérdésfeltevésen is van mit csiszolni"

Vilmos · 2014. Jún. 18. (Sze), 23.26
Hogyan kérdezzünk okosan Mire elolvastam elfelejtettem hogy kezdődik.
Kicsit bőbeszédű, nem ártana ennek sem egy "hőtérkép".