alfik
8.11.2005, 16:53:33
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
8.11.2005, 16:58:27
Nie wiem czy dobrze zrozumiałem, ale chyba potrzebujesz
explode" title="Zobacz w manualu php" target="_manual
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
8.11.2005, 17:40:12
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:
<?php
$plik = fopen ("test.txt", "r"); while (!feof ($uchwyt)) { $buffer = fgets($plik, 4096
); }
?>
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 STOP
!
~mike_mech
Skoro masz rekordy oddzielone spacjami to wystarczy wczytać cały plik do zmiennej i "przejechać" go
explodem.
<?php
$arrElements = explode( ' ', $strFile );
?>
alfik
8.11.2005, 18:07:43
nestety nadal nic z tego - dostaję wartość:
Array ( [Array] => 1 ) 1
Ja łącząc swój skrypt z takim plikiem:
test.txtCytat
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
8.11.2005, 18:34:08
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
8.11.2005, 21:35:06
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?
A może tak:
<?php
$resFile = fopen( 'test.txt', 'r' );
$arrElements = explode( ' ', $strContent );
?>
alfik
8.11.2005, 23:36:12
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?
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ć
alfik
9.11.2005, 14:47:18
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ć.
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
9.11.2005, 20:20:18
Mam coś takiego i wygląda na to, ze działa
<?php
$resFile = fopen( 'temp.txt', 'r' ); $strContent = trim($strContent); $arrElements = explode( ' ', $strContent ); foreach($tablica as $k=>$v){
if($v>$max){
$indeks=$k;
$max=$v;
}
}
?>
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.