Autor | Zpráva | ||
---|---|---|---|
4ever Profil |
#1 · Zasláno: 20. 10. 2011, 11:24:01
Chci vytvořit řetězec "$id_1,$val_1,$id_2,$val_2\r\n"
Nemáte nějaký nápad jak to udělat? Mám jedno vícerozměrné pole ( [0] => Array ( [9] => 3 // sloupec A [10] => 13 // sloupec B [4] => 3 // sloupec D at.d [1] => 10 [8] => 3 [20] => 4 [3] => 7 [5] => 1 [21] => 1 [2] => 1 [6] => 1 ) [1] => Array ( [31] => 3 // sloupec A [1] => 20 // sloupec B [6] => 6 // sloupec D atd. [4] => 3 [8] => 1 [2] => 5 [30] => 1 [0] => 1 [3] => 5 [10] => 1 [11] => 1 ) ) a nevím si rady jak to zpravovat, aby výsledný formát v txt souboru byl asi takto: 9,3,31,3 10,13,1,20 4,3,6,6 Ty indexy 0 a 1 označují dvě pole, které jsou kompatibilní. Tzn. první index pole[0] obsahuje id sloupce a hodnotu sloupce. A k tomuto sloupci náleží první index z druhého pole ..... Čili vlastně bych potřeboval dvě pole projít najednou. Něco jako kdybych chtěl sloučit foreach ($pole[0] as $id_1 => $val_1) a foreach ($pole[1] as $id_2 => $val_2) čili do jedné smyčky dostat klíče z obou polí. Díval jsem se na funkci array_walk, ale ta prochází jen jedno pole. Chci vytvořit řetězec "$id_1,$val_1,$id_2,$val_2\r\n" Nemáte nějaký nápad jak to udělat? |
||
Tori Profil |
#2 · Zasláno: 20. 10. 2011, 12:07:22 · Upravil/a: Tori
Šlo by to takto:
Procházet to velké pole. Nastavit $pocitadlo na 0. Procházet vnořené pole Každý klíč a hodnotu uložit (nebo připojit) jako řetězec do $vystupniPole[$pocitadlo] a inkrementovat $pocitadlo. Implodovat $vystupniPole, oddělovač = \n. Jako první mě napadlo vytáhnout klíče a hodnoty do samostatných polí (array_keys, array_values). Pak načíst první prvek ze všech polí, pak druhý atd. Ale bylo by to strašně neefektivní (paměť i počet průchodů poli). |
||
Majkl578 Profil |
#3 · Zasláno: 20. 10. 2011, 12:17:15
4ever:
„Díval jsem se na funkci array_walk, ale ta prochází jen jedno pole.“ Podívej se na array_walk_recursive. Příště sem to pole dávej v použitelném formátu (vyexportované třeba přes var_export, komu se má chtít s tímhle patlat). |
||
4ever Profil |
#4 · Zasláno: 20. 10. 2011, 12:29:55 · Upravil/a: 4ever
Na stránkách p. Vrány jsem našel instrukce na procházení pole.
while ( list($id_1, $count_1) = each($count_id[0]) ): $id_2 = key( $count_id[1] ); next( $count_id[1] ); $count_2 = $count_id[1][$id_2]; $string .= "$id_1,$count_1,$id_2,$count_2\r\n" ; endwhile; |
||
Tori Profil |
#5 · Zasláno: 20. 10. 2011, 12:49:18 · Upravil/a: Tori
4ever:
„Na stránkách p. Vrány jsem našel instrukce na procházení pole.“ |
||
4ever Profil |
#6 · Zasláno: 20. 10. 2011, 20:12:02
Tori:
Ano, problém vyřešen. Já jsem to chtěl udělat bez počítadla, ale klíčová otázka byla jaký použít cyklus. Tušil jsem že while, ale zase jsem nevěděl jak vyřešit ukončení cyklu. P. Vrána to vyřešil geniálně, na each() jsem už zapomněl. |
||
Časová prodleva: 13 let
|
0