Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Czy w tablicy znajduje sie dany element?
Forum PHP.pl > Forum > Przedszkole
Lombi
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. ?>
JoShiMa
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.
YaQzi
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);
michalg
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.
Lombi
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. ?>
michalg
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.
l0ud
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. ?>
Lombi
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.
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.