Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Czy w tablicy znajduje sie dany element?
Lombi
post 4.11.2008, 17:19:10
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 11
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Męcze się z tym badziewiem juz jakiś czas i nie chce mi to działać.
Mama tablice:

  1. <?php
  2. $table = array('id' => 1, 'type' => 0, 'name' => 'Link1',
  3.                'id' => 2, 'type' => 0, 'name' => 'Link2',
  4.                'id' => 3, 'type' => 0, 'name' => 'Link3',
  5.                'id' => 4, 'type' => 0, 'name' => 'Link4');
  6. ?>


Chcę mozliwie w jak najlatweijszy sposób sprawdzić czy $table['type'] ma gdzieś wartość 0.
Rozważałem in_array, array_search i array_keys i nie moge tego ogarnąc żeby działało jak należy.

Aktualnie mam tak:
  1. <?php
  2. if(in_array(0, $table['type']))
  3.    echo 'jest';
  4. else
  5.    echo 'nie ma';
  6. ?>


Ten post edytował Lombi 4.11.2008, 17:22:06


--------------------
znowu pomyliłem dwukropek ze średnikiem i starciłem pół dnia na szukanie błędu :)
Go to the top of the page
+Quote Post
JoShiMa
post 4.11.2008, 17:28:18
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


A to w ogóle jest poprawna konstrukcja, skoro 4 razy sobie przekrywasz te klucze to w efekcie masz taką tablice:

  1. <?php
  2. $table =  array('id' => 4, 'type' => 0, 'name' => 'Link4');
  3. ?>


i warunek
  1. <?php
  2. if(in_array(0, $table['type']))
  3. ?>
jest spełniony zawsze

Przemyśl najpierw konstrukcję tablicy.


--------------------
Go to the top of the page
+Quote Post
YaQzi
post 4.11.2008, 18:53:22
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 31
Dołączył: 12.10.2008
Skąd: WAT

Ostrzeżenie: (0%)
-----


Ano... JoShiMa dobrze gada. winksmiley.jpg Jeśli id są unikalne to tablica może wyglądać np tak:

  1. <?php
  2. $table = array('1' => array('type' => 0, 'name' => 'Link1'),
  3.               '2' => array('type' => 0, 'name' => 'Link2'),
  4.               '3' => array('type' => 0, 'name' => 'Link3'),
  5.               '4' => array('type' => 0, 'name' => 'Link4')
  6.               );
  7. ?>


A sprawdzenie jest już proste.

  1. <?php
  2. $jest = 0;
  3. foreach($table as $id => $tablica){
  4.    if($tablica['type'] == 0){
  5.        $jest = 1;
  6.    }
  7. }
  8. if($jest == 1){
  9.    echo "jest";
  10. }
  11. else{
  12.    echo "nima";
  13. }
  14. ?>


Jeśli masz problem z tablicą, zawsze sprawdzaj czy prawidłowo ją zaprojektowałeś. print_r($nazwa_tablicy);


--------------------
 Wszystkie wielkości świata nie są tyle warte, co dobra przyjaźń...
Go to the top of the page
+Quote Post
michalg
post 4.11.2008, 20:14:12
Post #4





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(YaQzi @ 4.11.2008, 18:53:22 ) *
A sprawdzenie jest już proste.

  1. <?php
  2. $jest = 0;
  3. foreach($table as $id => $tablica){
  4.    if($tablica['type'] == 0){
  5.        $jest = 1;
  6.    }
  7. }
  8. if($jest == 1){
  9.    echo &#092;"jest\";
  10. }
  11. else{
  12.    echo &#092;"nima\";
  13. }
  14. ?>


Jeśli masz problem z tablicą, zawsze sprawdzaj czy prawidłowo ją zaprojektowałeś. print_r($nazwa_tablicy);


Ja bym jeszcze tylko dodał break; pod linią $jest = 1; żeby nie iterować się niepotrzebnie po tablicy.
Go to the top of the page
+Quote Post
Lombi
post 4.11.2008, 21:29:23
Post #5





Grupa: Zarejestrowani
Postów: 237
Pomógł: 11
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Cytat
A to w ogóle jest poprawna konstrukcja, skoro 4 razy sobie przekrywasz te klucze to w efekcie masz taką tablice:
  1. <?php
  2. $table =  array('id' => 4, 'type' => 0, 'name' => 'Link4');
  3. ?>


Z tym się raczej nie zgodze. Dodawanie wpisów do tablicy wyglada tak:
  1. <?php
  2. for($i=0; $i<$this->number; $i++)
  3. {
  4.    $table[] = array('id' => $link[$i]['id'], 'type' => $link[$i]['type'], 'name' => $link[$i]['name']);
  5. }
  6. ?>


I w takiej oto tablicy z wieloma wpisami chce sprawdzić czy dana wartość instnieje.

Cytat
i warunek
  1. <?php
  2. if(in_array(0, $table['type']))
  3. ?>

jest spełniony zawsze


To był przykład. A w takim wypadku?
  1. <?php
  2. $table = array('id' => 1, 'type' => 0, 'name' => 'Link1',
  3.                'id' => 2, 'type' => 1, 'name' => 'PodLink1',
  4.                'id' => 3, 'type' => 0, 'name' => 'Link2',
  5.                'id' => 4, 'type' => 2, 'name' => 'PodPodLink1');
  6. ?>


Ten post edytował Lombi 4.11.2008, 21:33:21


--------------------
znowu pomyliłem dwukropek ze średnikiem i starciłem pół dnia na szukanie błędu :)
Go to the top of the page
+Quote Post
michalg
post 4.11.2008, 21:50:49
Post #6





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

Ostrzeżenie: (0%)
-----


Cytat(Lombi @ 4.11.2008, 21:29:23 ) *
  1. <?php
  2. for($i=0; $i<$this->number; $i++)
  3. {
  4.    $table[] = array('id' => $link[$i]['id'], 'type' => $link[$i]['type'], 'name' => $link[$i]['name']);
  5. }
  6. ?>


[..]

  1. <?php
  2. $table = array('id' => 1, 'type' => 0, 'name' => 'Link1',
  3.                'id' => 2, 'type' => 1, 'name' => 'PodLink1',
  4.                'id' => 3, 'type' => 0, 'name' => 'Link2',
  5.                'id' => 4, 'type' => 2, 'name' => 'PodPodLink1');
  6. ?>


To są dwie różne tablice. Drugi zapis jest niepoprawny - tablica będzie miała tylko jeden wiersz. Porównaj sobie za pomocą print_r.
Poprawny zapis to taki, jaki zaprezentował YaQzi. Jego rozwiązanie również jest prawidłowe.
Go to the top of the page
+Quote Post
l0ud
post 4.11.2008, 21:51:54
Post #7





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

Ostrzeżenie: (0%)
-----


Nie znalazłem odpowiedniej funkcji do takiej tablicy. Zawsze jednak możesz zrobić tak:

  1. <?php
  2. $found = 0;
  3. for ($i=0; $b=count($table); $i<$b; $i++)
  4.   if ($table[$i]['type'] === 0) {
  5.      $found = 1;
  6.      break;
  7.   }
  8. ?>


edit: michalg sądzę, że on tylko na szybkiego chciał pokazać jak ta tablica wygląda winksmiley.jpg A chodziło chyba o to:
  1. <?php
  2. $table = array(
  3.               array('id' => 1, 'type' => 0, 'name' => 'Link1'),
  4.               array('id' => 2, 'type' => 1, 'name' => 'PodLink1'),
  5.               array( 'id' => 3, 'type' => 0, 'name' => 'Link2'),
  6.               array('id' => 4, 'type' => 2, 'name' => 'PodPodLink1')
  7. );
  8. ?>


Ten post edytował l0ud 4.11.2008, 21:54:49


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Lombi
post 5.11.2008, 00:42:20
Post #8





Grupa: Zarejestrowani
Postów: 237
Pomógł: 11
Dołączył: 12.04.2006

Ostrzeżenie: (0%)
-----


Najlepiej zrozumiał mnie l0ud. Po dokładnym przeczytaniu wszystkich wypowiedzi usciułałem sposób odpowiedni dla mnie. Wszystko smiga aż miło. Dziekuję za wyprowadzenie mnie z błędu. Trudno mi wyłonić jedną osobe która pomogła, bo w sumie wszyscy sie przyczynili snitch.gif

Temat do zamknięcia.

Ten post edytował Lombi 5.11.2008, 00:43:16


--------------------
znowu pomyliłem dwukropek ze średnikiem i starciłem pół dnia na szukanie błędu :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 22:46