Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]array_unique dubluje mi jeden element tablicy
Forum PHP.pl > Forum > Przedszkole
adas007
Odczytuje plik o strukturze:
<_:a> <http://xmlns.com/foaf/0.1/name> "Ewcia".
<_:a> <http://xmlns.com/foaf/0.1/surname> "haha".
<_:a> <http://xmlns.com/foaf/0.1/nick> "sarenka".
<_:a> <http://xmlns.com/foaf/0.1/gender> "female".
<_:a> <http://xmlns.com/foaf/0.1/birthday> "05-25".
<_:a> <http://xmlns.com/foaf/0.1/age> 23.
<_:b> <http://xmlns.com/foaf/0.1/name> "Peter".
<_:b> <http://xmlns.com/foaf/0.1/nick> "Wariat".
<_:b> <http://xmlns.com/foaf/0.1/nick> "Kojot".
<_:b> <http://xmlns.com/foaf/0.1/gender> "male".
<_:b> <http://xmlns.com/foaf/0.1/birthday> "03-25".
<_:b> <http://xmlns.com/foaf/0.1/age> 33.

itd ...

. Stringi są oddzielone znakami tabulacji. Jak widać wiele z nich się powtarza.Rzecz w tym aby odczytać dane z tego pliku w ten sposób, że to pierwszej tablicy wrzucam pierwsze elementy stringu tzn: <_:a>,<_:b>.<_:a>,<_:d>,... itd.
Do drugiej: <http://xmlns.com/foaf/0.1/name>, <http://xmlns.com/foaf/0.1/name> ... itd. Do trzeciej tablicy: "Ewcia".,"Peter". ... itd. Następnie usunąć powtarzające się wiersze i tu mam problem gdyż pomimo korzytsania z funkcji array_unique pozostaje mi jeden dubel.

Tak to realizuje:
1) Odczyt pliku i rozbcie ze względu na znak \t
  1. <?php
  2. function czytajPlik()
  3. {
  4.  $uchwyt = fopen ("przyklad.n3", "r");
  5.  
  6.  $zawartosc = file_get_contents("przyklad.n3");
  7.  return $dane =explode( "\t" , $zawartosc);
  8.  
  9.  }
  10. ?>


2) Jedna z funkcji w tym przypadku do pobierania drugiego elementu wiersza:

  1. <?php
  2. function pobierzWlasciwosci($tablicaDanych)
  3. {
  4.  
  5. for ($i=2;$i<count($tablicaDanych);$i=$i+3)
  6. {
  7. $wlasciwosci[]=$tablicaDanych[$i];
  8.  
  9. }
  10.  
  11. return array_unique($wlasciwosci);
  12. }
  13. ?>



3) Wyświetlenie właściwości tzn wszystkich drugich elementów każdego wiersza:

  1. <?php
  2. $data=czytajPlik();
  3. $wlasciwosci=pobierzWlasciwosci($data);
  4.  
  5. foreach ($wlasciwosci as $k){
  6.  
  7. echo htmlspecialchars($k)."<br>";}
  8. ?>


Na ekranie dostaje:

<http://xmlns.com/foaf/0.1/name>
<http://xmlns.com/foaf/0.1/mbox>
<http://xmlns.com/foaf/0.1/surname>
<http://xmlns.com/foaf/0.1/nick>
<http://xmlns.com/foaf/0.1/gender>
<http://xmlns.com/foaf/0.1/birthday>
<http://xmlns.com/foaf/0.1/age>
<http://xmlns.com/foaf/0.1/age>

Jak widać <http://xmlns.com/foaf/0.1/age> jest zdublowany.
Wszystkie inne elementy tablicy $wlasciwosci zostały pozbawione powtarzających się wpisów. Ta sama sytuacja występuje gdy próbuje jedną z innych moich funkcji wyświetlić pozostałe elementy mojego trójelemntowego wiersza zawsze jeden element jest zdublowany
gox
array_unique nie pozostawai dubli, do tego jest stworzony, daj sobie var_dumpa i powownaj elementy znaczek po znaczku...

soł, kiedy juz skumasz sie ze stringi sa PRAWIE identyczne, mzoesz uzyc funkcji similar_text() i powownywac z dokladnoscia.. np. do conajmniej 90%.
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.