Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zwracanie do pliku array_walk_recursive
Forum PHP.pl > Forum > PHP > Object-oriented programming
piodof
Cześć,

Mam mały problem. Próbuje zwrócić do pliku wartość funkcji array_walk_recursive ale zwraca mi tylko cyfre 1. Przepisywałem to na 10 sposobów i już nie mam pomysłów. Może ktoś miał okazję wykorzystywać array_walk_recursive do tablicy wielowymiarowej?

To jest aktualny kod:

  1. <?php
  2. class testClass {
  3.    function callbackFunction($value, $key) {
  4.        global $data;
  5.        echo $data.$value;
  6.        $data=',';
  7.    }
  8.    function printArray($foo) {
  9.        $zrzut = array_walk_recursive($foo, array($this, 'callbackFunction'));
  10.        return $zrzut;
  11.    }
  12.    function zapis($nazwa_pliku) {
  13.    
  14.        global $tablica;
  15.        $printer = $this->printArray($tablica);
  16.    
  17.        if (is_writeable($nazwa_pliku))
  18.          {
  19.           if ($plik = fopen($nazwa_pliku, "w+"))
  20.             {
  21.              if (fwrite($plik, $printer) !== FALSE) echo "Zapis ok...<a href=".$nazwa_pliku.">".$nazwa_pliku."</a>";
  22.                else echo "Zapis błąd";
  23.        
  24.              fclose($plik);
  25.        
  26.             } else echo "Brak połączenia";
  27.        
  28.          } else echo "Plik nie istnieje lub złe prawa zapisu";
  29.    }
  30. }
  31.  
  32. $class = new testClass();
  33. $class->zapis('test.txt');
  34. ?>


Po wywołaniu klasy w przeglądarce wyświetlają się wartości tablicy a powinny zapisać się do pliku. W pliku zapisany jest tylko jeden znak - cyfra 1. Ma ktoś może pomysł jak zapisać wartości do pliku a nie wyświetlić w przeglądarce?
pejott
Przeczytałeś opis tej funkcji w manualu ? Ona zwraca true albo false.
piodof
Rzeczywiście, dzięki. Już myślałem, że w łatwy sposób uda mi się to zrobić a tu d**a. Masz może do polecenia jakąś klasę bądź funkcję, która miałaby podobny efekt? Szukałem na google i na phpclasses.org ale większość działa na tablicach asocjacyjnych a nie wielowymiarowych. Jeszcze raz dzięki za pomoc.
erix
Cytat
Po wywołaniu klasy w przeglądarce wyświetlają się wartości tablicy a powinny zapisać się do pliku.

Przydałoby się dowiedzieć, do czego ma Ci ta klasa służyć. Ale jeśli coś w stylu własnego debuggera, to masz przecież:
  1. var_export" title="Zobacz w manualu PHP" target="_manual
  2. buforowanie wyjścia (ob_start" title="Zobacz w manualu PHP" target="_manual)
piodof
Chciałem użyć tej klasy do zapisania tablicy do pliku csv. Mam plik xml, do którego znalazłem klasę, która przerabia go na tablicę. W tej tablicy mam kilka kluczy z różną ilością elementów. Właśnie na te tablice chciałem użyc array_walk_recursive.

Przykładowa tablicę wrzucam poniżej.

  1. <?php
  2. (
  3.    [nazwa1] => Array
  4.        (
  5.            [nazwa2] => Array
  6.                (
  7.                    [numery] => Array
  8.                        (
  9.                            [id] => Array
  10.                                (
  11.                                    [0] => Array
  12.                                        (
  13.                                            [#text] => 1046
  14.                                        )
  15.  
  16.                                    [1] => Array
  17.                                        (
  18.                                            [#text] => 1058
  19.                                        )
  20.  
  21.                                    [2] => Array
  22.                                        (
  23.                                            [#text] => 1033
  24.                                        )
  25.  
  26.                                )
  27.  
  28.                        )
  29.  
  30.                )
  31.  
  32.        )
  33.  
  34. )
  35. ?>


Znalazłem jakąś klasę, która przerabia xml bezpośrednio na csv ale jest komercyjna i dosyć droga. Zresztą nie wiem jak dokładnie działa. Wiem, że z super sformatowanego XMLa chcę zrobić brzydki csv ale muszę.

Zostanie mi pewnie do napisania foreach. Idę czytać manuala smile.gif
erix
A nie możesz po prostu dać zapisu w callbackFunction...?
piodof
Udało mi się nareszcie to zrobić. Dziękuje wszystkim za pomoc i naprowadzenie mnie na prawidłową drogę:) Dla zainteresowanych poniżej wrzucam kod. Klasa zapisuje do pliku wybrane wartości elementu z tablicy wielowymiarowej. Wystarczy w parametrze funkcji okreslic operatory (tablica, klucz oraz separator). Przykładowa tablica, na której bazuje klasa jest w poście wyżej.

  1. <?php
  2. class recursiveArrayValuesToFile {
  3.  
  4. function ArrayJoinByKey($Array, $ByKey, &$Przecinek) {
  5.  
  6.    foreach( $Array as $Key => $Value ) {
  7.  
  8.        if( is_array($Value) ) {
  9.  
  10.            $Joined .= $this->ArrayJoinByKey($Value,$ByKey,$Przecinek) ;
  11.        }
  12.        else if( $ByKey == $Key) {
  13.  
  14.            $Joined .= $Przecinek.$Value ;
  15.            $Przecinek = ',' ;
  16.        }
  17.    }
  18.    
  19.    return $Joined ;
  20. }
  21.    function Zapis($NazwaPliku) {
  22.    
  23.        global $xml_array ;
  24.        
  25.        $Printer = $this->ArrayJoinByKey($xml_array, '#text', $Przecinek) ;
  26.    
  27.        if (is_writeable($NazwaPliku))
  28.          {
  29.           if ($Plik = fopen($NazwaPliku, "w+"))
  30.             {
  31.              if (fwrite($Plik, $Printer) !== FALSE) echo "<BR><BR>Zapis ok...<a href=".$NazwaPliku.">".$NazwaPliku."</a>" ;
  32.                else echo "Zapis błąd" ;
  33.        
  34.              fclose($Plik) ;
  35.        
  36.             } else echo "Brak połączenia" ;
  37.        
  38.          } else echo "Plik nie istnieje lub złe prawa zapisu" ;
  39.    }
  40. }
  41.  
  42. $class = new recursiveArrayValuesToFile() ;
  43. $class->Zapis('test.txt') ;
  44. echo '<BR><BR>'.$class->ArrayJoinByKey($xml_array, '#text', $Przecinek) ;
  45. ?>
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.