Autor Zpráva
Johny98
Profil *
Ahoj, potřeboval bych funkci, která vytvoří z vícerozměrného pole jednorozměrné, asi nějak takto:
$pole = array("A", "B", "C", array("D", "E", "F", array("G", "H", "I"), "J"), "K", "L");
a výsledné pole:
array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L");
díky za radu
Joker
Profil
Johny98:
Šlo by to asi tímto algoritmem:

Vytvořit nové pole pro výstup.
Pro každou položku vstupního pole:
- pokud je to pole (is_array):
- - Aplikovat na položku rekurzivně tento algoritmus a jeho výsledek sloučit s výstupem.
- Jinak položku připojit k výstupu.
Vrátit výstup.
Johny98
Profil *
No mám tohle, ale to nefunguje:
         function Pole($data)
         {
             $result = array();
             for($i = 0; $i < count($data); $i++)
                if(is_array($data[$i]))
                    $result[] = Pole($data[$i]);
                else $result[] = $data[$i]; 
             return $result;
         }
         
         var_dump(Pole(array("A", "B", array("C", "D"))));
juriad
Profil
<?php
function _flatten($in, &$out) {
  foreach ($in as $key => $val) {
    if(is_array($val)) {
      _flatten($val, $out);
    } else {
      $out[] = $val;
    }
  }
}

function flatten($in) {
    $out = array();
    _flatten($in, $out);
    return $out;
}

var_dump(flatten(array("A", "B", array("C", "D"))));
Alphard
Profil
Johny98 [#3]:
Na 6. řádku by mělo stačit dát
$result = array_merge($result, Pole($data[$i]));
Johny98
Profil *
Díky, už to funguje
Mike8748
Profil
když už se tu předvádí kdo napíše hezčí kousek kódu tak si dovolím přidat

    $pole = array("A", "B", "C", array("D", "E", "F", array("G", "H", "I"), "J"), "K", "L");

    function funkce($a,$b)
    {
        if (is_array($b)) { $b=array_reduce($b,'funkce'); }
        return $a.$b;
    }


    $vysledek=array_reduce($pole,'funkce');

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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