Skocz do zawartości

wartość tablicy - in_array


itpawel

Rekomendowane odpowiedzi

Przede wszystkim

 in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool

Zwraca BOOL wiec nie ma informacji o indeksie;

Druga sprawa to dane wczytane funkcję file z pliku mają na końcu znak nowej linii którego musisz usunąć. Przykladowo

 

$needle = 'dane dwa';
		$haystack = file('/data.txt');
		$trimmedarray = array_map('trim',$haystack);
		
		echo print_r($trimmedarray);
		
		if(in_array ($needle, $trimmedarray))
		{
			echo 'JEST';
		}

 

 

I plik data.txt

dane jeden
dane dwa
dane trze
dane cztery

 

W celu sprawdzenia czy jest i na jakim indeksie <indeks liczy się od zera> możesz użyć funkcji
https://php.net/manual/en/function.array-search.php

$iskey = array_search('dane trze', $trimmedarray);
var_dump($iskey);
--
int(2) 

 

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Tak jak pisze @Mion, ale nie trzeba mapować, wystarczy tak:

$wp = file("test/2.txt",FILE_IGNORE_NEW_LINES);

 

Odnośnik do komentarza
Udostępnij na innych stronach

Próbuje na różne sposoby ale nie wychodzi np.

Cytat

$wp = file("test/2.txt");

function trimi($n)
{
    return trim($n);
}
$wp = array_map('trimi',$wp);

 

$wartosc = 'wartosc';
$wpi = array_search($wartosc, $wp);
var_dump($wpi);

 

if (in_array($wartosc, $wp)) {
echo "to sie nie wyświetla";}
else { 
echo "ni ma";}

 

I plik 2.txt

Cytat

wartosc
dane dwa
dane trze
dane czter

 

Wyświetla się:
var_dump - bool(false)
in_array - ni ma

Odnośnik do komentarza
Udostępnij na innych stronach

30 minut temu, itpawel napisał:

Próbuje na różne sposoby ale nie wychodzi np.

Ale co nie wychodzi ?

 

Po co piszesz własna funkcje trimi skoro PHP ma funkcję trim :o
Zapewniam Cie, że funkcja
in_array  jak i array_search działa poprawnie

 

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Cytat

$wp = file(trim(("$document_root/test/2.txt")));

var_dump($wp);

$wartosc = 'wartosc';
if (in_array($wartosc, $wp)) {
echo "to sie nie wyświetla";}
else { 
echo "<br />ni ma";}

 

I plik 2.txt: (zapisany w UTF-8 bez BOM)

Cytat

wartosc
dane dwa
dane trze
dane czter

 

Wyświetla:

  • Van_dump($wp):

 array(4) { 
[0]=> string(9) "wartosc " 
[1]=> string(10) "dane dwa " 
[2]=> string(11) "dane trze " 
[3]=> string(10) "dane czter" }

  • in_array: ni ma

Dlateczego wyświetla się "ni ma" zamiast "to sie nie wyświetla"?

Odnośnik do komentarza
Udostępnij na innych stronach

No w tym co teraz wkleiłeś ponownie nie usuwasz znaków końca linii z wartości tablicy.

 

Ja to przetestowałem u siebie z dokładnie tym samym kodem (post 5), wklejonym z forum. Nie działało mi też, ale problemem okazał się właśnie BOM (użyłem jakiegoś istniejącego pliku tekstowego i podmieniłem zawartość, dopiero później zauważyłem, że był zapisany jak był zapisany). Po zapisaniu jako UTF-8 bez BOM całość zaczęła mi działać.

Odnośnik do komentarza
Udostępnij na innych stronach

Oki, rzeczywiście działa przy zastosowaniu array_map :

function trimi($n)
{
    return trim($n);
}

$wp = array_map('trimi',$wp);

 

sprawdzałem jeszcze z zastosowaniem array_walk, ale w tym nie działa :

function trimi($n)
{
    return trim($n);
}

$wp = array_walk($wp,'trimi'); 

Odnośnik do komentarza
Udostępnij na innych stronach

2 godziny temu, itpawel napisał:

Dlateczego wyświetla się "ni ma" zamiast "to sie nie wyświetla"?

Nie Widzisz, że w tym co wkleiłeś są spacje bo tak masz w pliku ? Po to funkcja trim,  by te spacje i znak nowej linii usunąć wtedy otrzymasz inna tablicę "czystych" danach i wartości "dane trze" będą odnajdywane

     Van_dump($wp):

 array(4) { 
[0]=> string(9) "wartosc " 
[1]=> string(10) "dane dwa " 
[2]=> string(11) "dane trze " 
[3]=> string(10) "dane czter" } 

Czyli "dane trze " != "dane trze"

 

 

 

 

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Rozumiem Mion, na początku próbowałem usunąć spacje ale że korzystałem z array_walk to wyświetlał się błąd: in_array () oczekuje, że 2 parametr będzie tablicą. No dopiero array_map przyniosło pożądany efekt.

ttah - próbowałem również korzystać z rozmiązania okazwłoka ale:
Warning: Use of undefined constant FILE_IGNORE_NEW_LINES - assumed 'FILE_IGNORE_NEW_LINES' (this will throw an Error in a future version of PHP) in C:\xampp\htdocs\test\2.php on line 9

Warning: file() expects parameter 2 to be integer, string given in C:\xampp\htdocs\test\2.php on line 9

Warning: array_map(): Argument #2 should be an array in C:\xampp\htdocs\test\2.php on line 21

NULL
Warning: in_array() expects parameter 2 to be array, null given in C:\xampp\htdocs\test\2.php on line 28

ni ma

Odnośnik do komentarza
Udostępnij na innych stronach

Właściwie co Ty chcesz osiągnąć ?

 

Zakładając, że wysoka wydajność nie jest priorytetem i te kilka ms B) nie zrobi różnicy możesz wykorzystać pętlę foreach / for do iteracji przez tablicę i trim by oczyścić z spacji i nowych linii i klasyczne porównanie $linia =="tu szukana" lub dla częściowych porównań
https://php.net/manual/en/function.strpos.php
https://php.net/manual/en/function.preg-match.php

 

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności