Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak z wiersza zrobić kolumny
Forum PHP.pl > Forum > Przedszkole
alfik
Mam pytanie. Laduje plik do tablicy, wtedy ma ona postać:

autoa autob autoc autod

jak ją przekształcić do posatci:

autoa
autob
autoc
autod

tak, zeby każdy rekord był w kolejnym wierszu kolumny. Z góry dziękuję za informację.
legorek
Nie wiem czy dobrze zrozumiałem, ale chyba potrzebujesz explode" title="Zobacz w manualu php" target="_manual
mike
Cytat(alfik @ 2005-11-08 16:53:33)
(...) Laduje plik do tablicy, (...)

Pokaż jak ładujesz. Może po prostu wystarczy zmienić sposób wczytywania.
alfik
Chodzi mi o coś takiego. Mam plik tekstowy ze zmiennymi. Musze zliczyć ilość powtórzeń w całym pliku danej zmiennej. Mogę to zrobić za pomoćą takiego skryptu:

  1. <?php
  2. $tablica = array();
  3. $plik = fopen ("test.txt", "r");
  4. while (!feof ($uchwyt)) {
  5.  $buffer = fgets($plik, 4096);
  6.  array_push($tablica, $buffer);
  7. }
  8. fclose ($plik);
  9.  
  10. ?>


ale skrypt ten zlicza powtarzajace sie rekordy w kolumnach, ja natomiast w pliku mam tekordy oddzielone spacjami. Próbowałem używać funkcji explode w postaci:
explode(" ", $plik); bo rozumiem że między ", a" ma być separator (w tym przypadku spacja), ale chyba coś robię źle.


+ Bykom STOPexclamation.gif!
~mike_mech
mike
Skoro masz rekordy oddzielone spacjami to wystarczy wczytać cały plik do zmiennej i "przejechać" go explodem.
  1. <?php
  2.  
  3. $strFile = file_get_contents( 'text.txt' );
  4. $arrElements = explode( ' ', $strFile );
  5. echo '<pre>' . print_r( array_count_values( $arrElements ), true ) . '</pre>';
  6.  
  7. ?>
alfik
nestety nadal nic z tego - dostaję wartość:
Array ( [Array] => 1 ) 1
mike
Ja łącząc swój skrypt z takim plikiem:
test.txt
Cytat
123 wefw wegw wegwe gewgwe weweg 123 123 wefw wefw

Dostaję taki wynik:
Kod
Array
(
    [123] => 3
    [wefw] => 3
    [wegw] => 1
    [wegwe] => 1
    [gewgwe] => 1
    [weweg] => 1
)


Może u Ciebie plik wygląda inaczej lub mijamy się w zrozumieniu.
alfik
Doskonale mnie rozumiesz i właśnie oczekuje takich rezultatów, jak ty otrzymałeś. Błąd musi leżeć gdzieś po mojej stronie.
alfik
zmieniłem file_get_contenct (bo funkcja ta dział od ver 4.3.0, a ja kożystam z 4.2.2.) na readfiles i wynik działania skryptu jest następujący:
123 wefw wegw wegwe gewgwe weweg 123 123 wefw wefwArray ( [50] => 1 ) 1
czyli nadal błędny.
Czy jest możliwe osiągnięcie na wersji php którą psiadam prawidłowego wyniku, a jeśli nawet nie, to czy chociaż jest możliwe wskazanie, którawartośw występuje najczęściej (bo generalnie o to mi chodzi). Może wchodzi w grę zastosowanie jakiejśpętli?
mike
A może tak:
  1. <?php
  2.  
  3. $resFile = fopen( 'test.txt', 'r' );
  4. $strContent = fread( $resFile, filesize( 'test.txt' ) );
  5. fclose( $resFile );
  6.  
  7. $arrElements = explode( ' ', $strContent );
  8. echo '<pre>' . print_r( array_count_values( $arrElements ), true ) . '</pre>';
  9.  
  10. ?>

smile.gif
alfik
Rewelacja - działa!
Mogę sie jeszcze o coś spytać ( wiem , ze marudzę, ale jestem na razie w tym temacie zielony, a to dla mnie b. ważne).
Jak teraz "wyciągnać" z pliku ten element, który sie powtórzył najczęściej i zapisać go jako zmienną do dalszego wykorzystania w skrypcie?
mike
Hehe, to już możesz sam zrobić.

Zajrzyj do funkcji sort(), key(), current() i ogólnie zapoznaj się z zfunkcjami do obsługi tablic. Wszstko jest tam opisane. Trzeba tylko troszke poszukać winksmiley.jpg
alfik
A mogę jednak prosić o jakąs podpowiedż, bo poczytałem manuala, ale nie wiele mi to dało. Najlepiej by było posortować teblicę malejąco wg. wartości zwróconych przez funkcję array_count_values i wyświetli pierwszy element, ale nie mam pomysłu, jak to wykonać.
mike
Do sortowania służy funkcja sort(). Pobierasz pierwszy elemetz za pomocą klucz => key() i wartość => [c]current()[/b].

Wszystko jest opisane w manualau wraz z przejrzystymi przykładami. Nie przesadzaj, bo będe zmuszony zamknąć temat.

A jak coś Ci nie idzie to po prostu wstaw kod i powiemy Ci co jest nie tak, ale to wymaga najpierw swojej własnej inwencji.
alfik
Mam coś takiego i wygląda na to, ze działa
  1. <?php
  2.  
  3. $resFile = fopen( 'temp.txt', 'r' );
  4. $strContent = fread( $resFile, filesize( 'temp.txt' ) );
  5. $strContent = trim($strContent);
  6. $arrElements = explode( ' ', $strContent );
  7. $tablica=array_count_values( $arrElements );
  8. echo print_r( array_count_values( $arrElements ) );
  9. foreach($tablica as $k=>$v){
  10. if($v>$max){
  11. $indeks=$k;
  12. $max=$v;
  13. }
  14. } 
  15. print ("$indeks");
  16.  
  17. ?>


Pozdrawiam i dziękuję, za pomoc.
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.