Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czytanie z pliku do ARRAY
Forum PHP.pl > Forum > Przedszkole
Zenobiusz
Szukam metody na czytanie ciągu liczb z pliku tekstowego a nie serwera. Próbowałem na zmiennych ale nic nie wychodziło np.

$la = "1,2,1,2,3,4";

$zbior = array($la);
$jaka = 1;







<?php
$zbior = array(_czytanie liczb z pliku_);
$jaka = 1;

function szukana($liczby, $wystepowanie)
{
$suma=array();

foreach($liczby as $co => $ile)
{
if ($ile == $wystepowanie)
{
$suma[] = $ile;

}
}

return count($suma);
}
$get = szukana($zbior, $jaka);


echo 'wartość: ' . $jaka . ' wystepuje: ' . $get;
?>
viking
https://www.php.net/manual/en/function.file-get-contents.php
Jak zaincludujesz plik to masz go ze wszystkimi zmiennymi.
Zenobiusz
Nie działa w żadnym przypadku:

$zbior = array(file_get_contents('testfile.txt'));
$jaka = 1;

oraz:

$la = file_get_contents('testfile.txt');
$zbior = array($la);
$jaka = 1;
nospor
A patrzyles co ci zwraca
file_get_contents('testfile.txt');
?

print_r(file_get_contents('testfile.txt'));
Zenobiusz
print_r(file_get_contents('testfile.txt'));

zwraca ciąg liczb zapisany w pliku tekstowym, ale nie wyświetla wystąpień liczby 1 czyli $jaka=1

natomiast przy: file_get_contents('testfile.txt');

wartość: 1 wystepuje: 0 a powinno byc 3 bo jedynek jest 3 (1, 2, 4, 1, 5, 10, 11, 15, 23, 1)
nospor
a ciag liczbowy to poprostu:
2,3,5,7,6
?

No to zrob explode na wyniku i bedziesz mial swoja tablice
viking
To jeśli chcesz w ten sposób to czemu po prostu nie zrobisz include/require?
nospor
@viking ale co mu da require skoro plik zawiera
1, 2, 4, 1, 5, 10, 11, 15, 23, 1
?

@Zenobiusz jak mowilem: file_get_contents a potem explode po przecinku (w sumie po przecinku i spacji bo widze masz spacje po kazdym przecinku) i masz tablice na ktorej mozesz pracowac
viking
Bo zakładam że ten plik powinien docelowo zawierać tablicę ale jeszcze tego nie ogarnia. Ale mogę się mylić.
Zenobiusz
To napisz czego mogę nie ogarniać wink.gif Może to jest właśnie to biggrin.gif

Cytat(nospor @ 25.08.2020, 11:12:14 ) *
a ciag liczbowy to poprostu:
2,3,5,7,6
?

No to zrob explode na wyniku i bedziesz mial swoja tablice


Explode też nie działa

$lczb = '1, 2, 4, 1, 5, 10, 11, 15, 23, 1';
$la = explode(" ", $lczb);

$zbior = array($la);
$jaka = 1;

pojawia się:
wartość: 1 wystepuje: 0

Tylko mi chodzi o czytanie z pliku txt w którym jest ciąg liczb i to z tego ciągu ma wyszukać ilośc występowanej liczby jeden.
nospor
Toc mowilm ze explode ma byc po przecinku i spacji czyli po takim ciagu ktory oddziela liczby...
viking
https://www.php.net/manual/en/function.substr-count.php

  1. $liczby = file_get_contents('plik.txt');
  2. if ($liczby){
  3. sprintf('Wartość: %d występuje: %d', $jaka, substr_count($liczby, $jaka));
  4. }
  5.  

Jeśli w piku będzie np 1,2,11,12 to oczywiście explode.
nospor
@viking ale twoj kod lyknie tez 11
viking
Tak, wiem dopisałem mu w oryginalnym poście.

A te dane kto zapisuje, masz na nie wpływ żeby zapisać od razu jako tablicę czy np json?
Zenobiusz
Cytat(viking @ 25.08.2020, 12:28:37 ) *
Tak, wiem dopisałem mu w oryginalnym poście.

A te dane kto zapisuje, masz na nie wpływ żeby zapisać od razu jako tablicę czy np json?



Zapisuje od razu. Sprawdzę czy to wszystko działa smile.gif


Warning: substr_count(): Empty substring in
nospor
Zero samodzielnosci.... jak wol masz napisane ze przekazujesz pusty string. TO sprawdz co zawieraja twoje zmiennej ktore przekazujesz do substr_count

A dwa przeciez ci juz powiedziano ze metoda substr_count bedzie zle dzialac gdy bedziesz mial liczby ala 11,12,13 itd a z wczesniejszych postow wynika ze masz. Czytasz w ogole co sie tutaj pisze?
Zenobiusz
Nie mam podwójnych liczb. Mam pojedyńcze a błąd nadal występuje.
nospor
Co do bledu to ci zdaje sie juz napisalem co masz zrobic

Cytat
Nie mam podwójnych liczb
To po co w przykladach wczesniej podawales ze masz? (pytanie retoryczne)
Zenobiusz
Bo zmieniłem według waszych zaleceń.
viking
Dodałeś tam zmienną jaka czy nie?
Zenobiusz
<?php
$liczby = file_get_contents('testfile.txt');



$zbior = array();
$jaka = 1;


function szukana($liczby, $wystepowanie)
{
if ($liczby)
{
sprintf('Wartość: %d występuje: %d', $jaka, substr_count($liczby, $jaka));
}
$suma=array();

foreach($liczby as $co => $ile)
{
if ($ile == $wystepowanie)
{
$suma[] = $ile;

}
}



return count($suma);
}
$get = szukana($zbior, $jaka);


echo 'wartość: ' . $jaka . ' wystepuje: ' . $get;
?>
nospor
Chyba pobiles rekord w liczbe bledow w tak krotkim kodzie....

1) Zacznij wkoncu uzywac BBCODE
2) Wlacz wyswietlanie bledow a czesc z nich zobaczysz na ekranie
3) I generalnie zastosuj sie do tego
Temat: Jak poprawnie zadac pytanie oraz przygotowac srodowisko pracy
bo juz tyle czasu na forum a ciagle nie potrafisz poprawnie zadac pytania
gino
no i jak Ci się udało wepchnąć zmienną lokalną
Kod
$jaka
do funkcji to ja nie wiem

gino
nospor
@gino to miedzy innymi by pokazalo wyswietlanie bledow o ktorym pisalem
gino
to pokazuje, jak nie ma podstawy podstaw języka, jak nie pokażesz palcem, to nawet gdyby raportowanie błędów było załączone nic nie da.

gino
nospor
Tylko twoja odpowiedz o zmiennej lokalnej tez nie wiele wiecej daje wink.gif Wiec juz jak tak bardzo chciales wytlumaczyc, to rob to dobrze wink.gif
gino
@nospor no dobrze, postaram się

1 plik jest tekstowy, nawet jak wrzucisz liczby do tablicy będą typu string, u Ciebie zmienna $jaka typu int
2 nie możesz używać zmiennych lokalnych wewnątrz funkcji, ich wartość przekazujesz przez atrybuty funkcji, którymi operujesz w ciele funkcji podczas jej definicji
3 jak napisał nospor dobre środowisko pracy ułatwia bardzo wiele

poniżej kod, który robi co chcesz:

Kod
$zbior = explode(',',file_get_contents('testfile.txt'));
$jaka = 1;

function serch_value($arr, $val)
{
    $count_num = 0;
    foreach ($arr as $key) {
        if((int)$key === $val) {
            $count_num++;
        }
    }
  return $count_num;
}

$get = serch_value($zbior, $jaka);


funkcja zwraca ilość występowań danej liczby.

gino
Tomplus
Nie lepiej użyć gotowej funkcji count_chars()
Zenobiusz
TEn kod u góry działa i jest prawidłowy wystarczy sprawdzić:

$zbior = array(1,11,12,13,1);
$jaka = 1;

Nie wiem co wy od niego chcecie ?
nospor
A kto to cos od niego chce? Jedynie Tomplus zaproponowal jeszcze inne rozwiazanie. Wiec czego ty od nas chcesz? wink.gif
Zenobiusz
Pomocy w postaci rozwiązania, ale jakoś to słabo widze biggrin.gif
nospor
No przeciez dostales. Nawet sam napisales ze dziala
Cytat
TEn kod u góry działa i jest prawidłowy wystarczy sprawdzić:

To o co ci jeszcze chodzi?
Zenobiusz
Chodzi mi o mój kod.

Cytat(Tomplus @ 26.08.2020, 20:45:04 ) *
Nie lepiej użyć gotowej funkcji count_chars()


jakiś przykład ?

Dziękuje GINO.
gino
count_chars w zależności od zastosowanego opcjonalnego atrybutu (dla przykładu 1) zwróci tablicę w postaci znak_łaćucha => ilość_wystąpień, ale dla Twoich liczb będzie liczył wszystkie wystąpienia czyli "2,22" pokażę, że jest 3=>2

gino

edit miało być: 2=>3
Zenobiusz
Dobra Panie i Panowie. Dziękuje wszystkim za POMOC i udział w dyskusji. Temat można zakończyć. POZDRAWIAM.
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.