Autor Zpráva
martinvvv
Profil *
Ahoj,
potřeboval bych poradit jak z víceúrovňového pole vytvořit jednoúrovňové pole. Hledal jsem na to přímo funkci a i napsat něco svého, ale bez spěchu.
Předem díky za radu

//Vstup
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => name1
            [lower] => Array
                (
                )
        )
    [1] => Array
        (
            [id] => 2
            [name] => name2
            [lower] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [name] => name5
                            [lower] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 10
                                            [name] => name10
                                            [lower] => Array
                                                (
                                                )
                                        )
                                )
                          )
                  )
          )
)

//Optimální výstup
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => name1
        )
    [1] => Array
        (
            [id] => 2
            [name] => name2
    [2] => Array
        (
            [id] => 5
            [name] => name5
    [3] => Array
        (
            [id] => 10
            [name] => name10
        )
)



Knight
Profil
function vytvorJednourovnovePole($pole) {
	If (is_array($pole)) {
		foreach ($pole as $polozka) {
			$nove_pole[] = array("id" => $polozka['id'], "name" => $polozka['name']);
			
			If (is_array($polozka['lower']) && count($polozka['lower'])) {
				$pole_podpolozek = vytvorJednourovnovePole($polozka['lower']);
				
				If ($pole_podpolozek) { 
					$nove_pole = array_merge($nove_pole, $pole_podpolozek);
				}
			}
		}
		
		return $nove_pole;
	}
}
Kcko
Profil
OT: Jak udělat z toho výstupu od uživatele martinvvv klasické pole? Sem se Tim chtěl zaobírat, byl jsem líný si to pole napsat ručně a nejde mi z toho udělat klasické PHP pole.
Tasartir
Profil
Kcko:
Taky jsem se tím začal zaobírat, ale bude půl čtvrté, je pátek, to bude nejvyšší čas jet domu, tak ti aspoň pošlu co jsem si vytvořil

$array = array();
$array[] = array('id' => 1, 'name' => 'name1', 'lower' => array());
$array[] = array('id' => 2, 'name' => 'name2', 'lower' => array('id' => 5, 'name' => 'name5', 'lower' => array('id' => 10, 'name' => 'name10', 'lower' => array())));
Knight
Profil
Kcko:
Blbě, na to by se musela použít fce var_export, tenhle dump je schválně udělaný, aby se lépe četl pro člověka.
Kcko
Profil
Tasartir:
Díky :-), já to vědět nechci (nejsem autorem topicu) a tu funkci bych si napsal samozřejmě sám (kdybych autorem byl). Ptal jsem se na něco jiného.

Knight:
To samozřejmě vím :))), zkouším to prohnat Eval-em ale asi dělám něco blbě, stále mi na to nejde přistupovat jako na pole.
Knight
Profil
Kcko:
Aby fungoval eval, tak to musí být ve tvaru správné definice pole, tzn. nahradit hranaté závorky, obalit stringy a přidat čárky mezi hodnoty. Na to si můžeš napsat nějaký regexp. :) Takže ve výsledku vznikne tohle:

$pole = Array
(
    0 => Array
        (
            'id' => 1,
            'name' => "name1",
            'lower' => Array
                (
                )
        ),
    1 => Array
        (
            'id' => 2,
            'name' => "name2",
            'lower' => Array
                (
                    '0' => Array
                        (
                            'id' => 5,
                            'name' => "name5",
                            'lower' => Array
                                (
                                    '0' => Array
                                        (
                                            'id' => 10,
                                            'name' => "name10",
                                            'lower' => Array
                                                (
                                                )
                                        )
                                )
                          )
                  )
          )
);
Kcko
Profil
Knight:
Jasně :-) a ještě uvařím zakladateli topicu kafe a vyžehlím noviny ;-)
Knight
Profil
Kcko:
Díky, tenhle komentář mi rozjasnil den. :)

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