Autor Zpráva
4ever
Profil
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
Š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
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
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
4ever:
Na stránkách p. Vrány jsem našel instrukce na procházení pole.
= problém vyřešen? Při zběžném pohledu mi to připadá, že se v tom kódu předpokládají stejné klíče pro $pole[0] a $pole[1], což v [#1] není. edit: pardon, koukala jsem opravdu jen zběžně, až na ty překlepy ve jménech proměnných to samozřejmě funguje. Rozdíl je jen v tom, že pro každé další vnořené pole musíte duplikovat řádky 2+3, a v tom, co se objeví ve výstupu, když nebudou mít všechna vnořená pole stejný počet prvků.
4ever
Profil
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0