Adott két tömb egy PHP fájlban, azonos felépítéssel.
Azt szeretném megoldani, hogy ezek a tömbök ne összfűzve legyenek, azaz egyik vége után a teljes másik, hanem soronként összefésülve és egy tömben eltárolva. Az array_merge()
függvénnyel próbáltam, de az az előbbi nem kívánt módon működött. Egész pontosan a mergeLineFiles()
-hez hasonló kimenetüt keresnék, csak tömbökre használható függvény formájában.
Ilyen kimenttel, csak tömbökre:
array (
0 => 'line_1 from file1',
1 => 'line_1 from file2',
2 => 'line_1 from file3',
3 => 'line_2 from file1',
4 => 'line_2 from file2',
5 => 'line_2 from file3',
6 => 'line_3 from file1',
7 => 'line_3 from file2',
8 => 'line_3 from file3',
);
- 4783 megtekintés
Hozzászólások
for i++ amig nincsvége {
push ujtomb tomb1[i]
push ujtomb tomb2[i]
push ujtomb tomb3[i]
}
nyilván még tomb1-3 végére figyelünk meg ilyesmi, meg el lehet generalizálni, hogy hány tömböt eszik, de azért nem tűnik egy hűde bonyi feladatnak...
- A hozzászóláshoz be kell jelentkezni
Csak 2 tömbről lenne szó, viszont ez is hozzáfűzés, egyiket a másik végéhez.
Manuálisan soronként hozzáfűzni egyiket a másikhoz pedig nagyon sokáig tartana.
- A hozzászóláshoz be kell jelentkezni
akkor eggyel kevesebb sor a fentivel?
vagy a manuálisat úgy érted, hogy kézzel megírva a függvényt? imho akkor az a beépítettel is lassú, csodák nincsenek.
ha meg nem php, csak gyors hacket keresel, akkor
paste -d "\n" file1 file2 |grep -v '^$'
- A hozzászóláshoz be kell jelentkezni
Vagy még gyorsabb az, ha nem másol, hanem egy függvény első két paraméterében a tömböket, a harmadik paraméterben az indexet adja meg, a függvény pedig az index párosságának megfelelően az a1[int(i/2)] vagy a2[int(i/2)] elemet adja vissza.
... mármint addig gyorsabb, amíg nem kell mindent visszaolvasni.
- A hozzászóláshoz be kell jelentkezni
én úgy értelmeztem, hogy elő akarja állítani, de nyilván lehet hogy nem, olyan persze ki kell egyszerűen matekozni, hogy mi lenne ott, valóban. Ami meg hacsak valamit el nem csesz az ember, akkor az O(1).
- A hozzászóláshoz be kell jelentkezni
Mielőtt ezt leírtad, elővettél egy darab papírt, amelyen 2 db kételemű tömbbel lefuttattad a fenti algoritmust?
(Bizisten nem buzerálni akarlak, amikor azt írom, hogy szűk egy hét tapasztalata az, hogy jól fel kell kötnie az idegrendszerét annak, aki neked segíteni akar.)
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
most látom: nem ez nem hozzáfűzés. Ez először az elsőket veszi minden tömbből, aztán a másodikakat... pont mint a példád...
- A hozzászóláshoz be kell jelentkezni
szerk: ez se jó... Végül is azt szeretnéd, ha felváltva venne egy-egy elemet mindkettő (a példában három) input-tömbből?
- A hozzászóláshoz be kell jelentkezni
Igen.
- A hozzászóláshoz be kell jelentkezni
És pontosan miért is nem jó csak úgy simán venni az elemeket felváltva?:
for ($i=0; $i<n; ++$i) {
$uj[] = $a[$i];
$uj[] = $b[$i];
}
- A hozzászóláshoz be kell jelentkezni
Ha jól értem, az azonos kulcsú értékekből(??? vagy azonos értékekből, mert hagyományos tömb?) csak egy példányt akar megtartani. Már feltéve, hogy jól értelmezem és asszociatív tömbjei vannak, ahol a tömbelemeknek bármilyen kulcsa lehet.
De elképzelhető, hogy félreértem.
- A hozzászóláshoz be kell jelentkezni
"Hagyományos" tömbök és nem szabad egy példánynak sem elvesznie.
- A hozzászóláshoz be kell jelentkezni
Szóval van két tömböd:
1,4,5,6,7,99
1,2,3,4,5
Ebből mit akarsz?
1,1,2,3,4,4,5,5,6,7,99?
vagy
1,1,4,2,5,3,6,4,7,5,99?
- A hozzászóláshoz be kell jelentkezni
Alább már ott a megoldás(Köszönöm!), egyébként a 2.
- A hozzászóláshoz be kell jelentkezni
Amit NevemTeve javasolt, az ugyanez, csak erősen vázlatos formában. Úgyhogy nem értelek. (pontosabban azt nem értem, hogy ha ennyit nem értesz, akkor miért erőlteted ezt a programozósdit)
- A hozzászóláshoz be kell jelentkezni
A konkrét szituációban az úgy nem volt jó. Az nekem is eszembe jutott, szemben az utolsó példa módszerével.
- A hozzászóláshoz be kell jelentkezni
Miért? 1:1-ben ugyanazt kellett eredményeznie egyforma hosszúságú tömbök esetében.
Erre írtam, hogy vázlatos, mert nem törődött azzal, hogy ha eltérő a két tömb mérete, akkor mi legyen a hosszabbal.
- A hozzászóláshoz be kell jelentkezni
Ez a kód nálam ilyen formában nem hozta a kívánt eredményt. :/
- A hozzászóláshoz be kell jelentkezni
A tömbjeidnek mik az indexei? Számok, rendesen nullától, vagy esetleg asszociatív tömbök?
Vagy esetleg az array_combine-nal elérheted, hogy az indexek az egyik tömbből, az értékek meg a másik tömbből származnak, ez is félig-meddig felváltva lesz - persze ha az indexként használt tömbben vannak egyforma elemek, akkor nem fog működni.
- A hozzászóláshoz be kell jelentkezni
bakker, hogy phpban az array az igazából egy asszociatív tömb? hogyaza :)
- A hozzászóláshoz be kell jelentkezni
Jóvanna, de érthető, mire gondolok. Én legalábbis értem :)
- A hozzászóláshoz be kell jelentkezni
Ja, nem, azt amit te írtál, azt értem, csak erősen meglepődtem, hogy phpben az array az tulajdonképpen egy asszociatív tömb (csak van neki shortcutja arra, hogy a kulcsok i++ legyenek), nem csak egy sima mezei lista.
Aztán jött a dejavu, hogy erre egyszer már rácsodálkoztam :)
- A hozzászóláshoz be kell jelentkezni
Az indexek számok, 0-tól indulnak. Azonos elemek előfordulhatnak a két tömbben, a fenti függvény ezek szerint emiatt nem adott jó eredményt nálam.
- A hozzászóláshoz be kell jelentkezni
valami ilyesmi (kicsit dedosan, hogy szemleletes legyen):
$ cat index.php
<?php
$a = $b = range(1, 5);
$c = [];
$a = array_map(function($egy) { return 'elso_' . $egy;}, $a);
$b = array_map(function($egy) { return 'mdik_' . $egy;}, $b);
for ($i = 0; $i<=max(array(count($a), count($b))); $i++) {
if (!empty($a[$i])) {
$c[] = $a[$i];
}
if (!empty($b[$i])) {
$c[] = $b[$i];
}
}
print_r($c);
eredmenye:
$ php index.php
Array
(
[0] => elso_1
[1] => mdik_1
[2] => elso_2
[3] => mdik_2
[4] => elso_3
[5] => mdik_3
[6] => elso_4
[7] => mdik_4
[8] => elso_5
[9] => mdik_5
)
t
- A hozzászóláshoz be kell jelentkezni
Ez egy nagyon jó megoldás, a kimenete alapján pont erre lenne szükség! Köszönöm!
- A hozzászóláshoz be kell jelentkezni
ez a megoldás pontosan ugyanaz, mint az összes többi, csak bele van írva, hogy a lista hosszokkal is foglalkozzon, amit mi fent csak szóltunk, hogy még az is kéne...
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Ha jól értem, duplaszűrés is kellene, de hogy a duplák miért csak azonos pozíción fordulnak elő, azt nem tudom... így már inkább egy összefésülésre gondolnék, ami persze rendezett inputot igényel.
- A hozzászóláshoz be kell jelentkezni
szeritnem nem. Mind tökugyanaz, csak egyre jobban konkrétan van leírva. (Az utolsóban az array mapes izé ugye csak a teszt bemeneti adatot állítja elő)
- A hozzászóláshoz be kell jelentkezni