Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]spłaszczenie zagnieżdżonych tablic php 5.3.0
Forum PHP.pl > Forum > Przedszkole
madrazel
udało mi się znaleźć takie 2 skrypty:
Kod
<code><span class="html"><span class="default">  </span><span class="keyword">function </span><span class="default">array_flatten</span><span class="keyword">(</span><span class="default">$a</span><span class="keyword">) {
        foreach(</span><span class="default">$a </span><span class="keyword">as </span><span class="default">$k</span><span class="keyword">=></span><span class="default">$v</span><span class="keyword">) </span><span class="default">$a</span><span class="keyword">[</span><span class="default">$k</span><span class="keyword">]=(array)</span><span class="default">$v</span><span class="keyword">;
        return </span><span class="default">call_user_func_array</span><span class="keyword">(</span><span class="default">array_merge</span><span class="keyword">,</span><span class="default">$a</span><span class="keyword">);
      }</span></span></code>


Kod
<span class="ident">function</span> <span class="ident">flatten_array</span><span class="punct">(</span><span class="ident">array</span> <span class="global">$a</span><span class="punct">)</span> <span class="punct">{</span>
      <span class="global">$i</span> <span class="punct">=</span> <span class="number">0</span><span class="punct">;</span>
      <span class="keyword">while</span> <span class="punct">(</span><span class="global">$i</span> <span class="punct"><</span> <span class="ident">count</span><span class="punct">(</span><span class="global">$a</span><span class="punct">))</span> <span class="punct">{</span>
          <span class="keyword">if</span> <span class="punct">(</span><span class="ident">is_array</span><span class="punct">(</span><span class="global">$a</span><span class="punct">[</span><span class="global">$i</span><span class="punct">]))</span> <span class="punct">{</span>
              <span class="ident">array_splice</span><span class="punct">(</span><span class="global">$a</span><span class="punct">,</span> <span class="global">$i</span><span class="punct">,</span> <span class="number">1</span><span class="punct">,</span> <span class="global">$a</span><span class="punct">[</span><span class="global">$i</span><span class="punct">]);</span>
          <span class="punct">}</span> <span class="keyword">else</span> <span class="punct">{</span>
              <span class="global">$i</span><span class="punct">++;</span>
          <span class="punct">}</span>
      <span class="punct">}</span>
      <span class="keyword">return</span> <span class="global">$a</span><span class="punct">;</span>
  <span class="punct">}</span>

ale to są stare wpisy sprzed ponad roku, może jest w najnowszej wersji php jakaś jednolinijkowa funcja na to ?

o rany boskie a cóż to się stało że mi się kody nie chciały wkleić ?
Fifi209
Z tego co podałeś jest cokolwiek trudno wyczytać. Tak więc opisz może swój problem?
madrazel
ja tego tak nie wkleiłem, zostawiłem to tak jak jest bo wygląda mi to na jakiś błąd z forum

a problem jest taki że mam tablicę np. taką:

Kod
Array
(
    [0] => jeden
    [1] => dwa
    [2] => Array
        (
            [0] => trzy
            [1] => cztery
            [2] => Array
                (
                    [0] => piec
                    [1] => szesc
                )

        )

)


a chcę aby było tak:

Kod
Array
(
    [0] => jeden
    [1] => dwa
    [2] => trzy
    [3] => cztery
    [4] => piec
    [5] => szesc
)
Fifi209
Nie wiem czy jest gotowa funkcja ew. możesz napisać swoją.
Użyć do tego is_array i sprawdzać.

  1. <?php
  2.  
  3. $a = array('jeden', 'dwa', array('trzy', 'cztery', array('piec')));
  4.  
  5. $n = array();
  6.  
  7. function testowa($x) {
  8. global $n;
  9. foreach ($x as $value) {
  10. if (!is_array($value)) {
  11. $n[] = $value;
  12. }else{
  13. testowa($value);
  14. }
  15. }
  16. }
  17.  
  18. testowa($a);
  19.  
  20. echo '<pre>';
  21. print_r($n);
  22. echo '</pre>';
  23.  
  24. ?>
madrazel
wbrew pozorom to jest przydatne, można np. napisać funkcję która potrzebuje jakieś tam parametry, niech to będą np. ścieżki dostępu do plików - tak aby ta funkcja nie głupiała jeśli np. dostanie pojedyńczy parametr jako string, czy kombinację stringów i tablic, zdziwiony jestem że nie zrobili z tego jednolinijkowca w 5.3.0
erix
Cytat
Nie wiem czy jest gotowa funkcja ew. możesz napisać swoją.

Dałem linka do czegoś takiego, bez paskudnych globali. tongue.gif

Cytat
niech to będą np. ścieżki dostępu do plików - tak aby ta funkcja nie głupiała jeśli np. dostanie pojedyńczy parametr jako string, czy kombinację stringów i tablic, zdziwiony jestem że nie zrobili z tego jednolinijkowca w 5.3.0

Do takich rzeczy jest RecursiveIteratorIterator z SPL, więc nie mów, że nie ma. tongue.gif
Fifi209
Erix warto zwrócić uwagę, że posty napisaliśmy w tej samej minucie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.