Szukanie w tablicy

0

Witam serdecznie,
Mam taki kod do dodawania wartości do tablicy:

$_SESSION['koszykzamowien'][] = array('id' =>czysc_sql_liczby($_POST['itemid']), 'nazwa' =>baza_zapis($_POST['i_nazwa']), 'cena' =>baza_zapis($_POST['i_cena']));
 

Co daje taką tablicę:

Array
(
    [0] => Array
        (
            [id] => 4
            [nazwa] => nazwa1
            [cena] => 106.00
        )

    [1] => Array
        (
            [id] => 4
            [nazwa] => nazwa1
            [cena] => 106.00
        )

    [2] => Array
        (
            [id] => 4
            [nazwa] => nazwa1
            [cena] => 106.00
        )

    [3] => Array
        (
            [id] => 2
            [nazwa] => nazwa
            [cena] => 100.00
        )

    [4] => Array
        (
            [id] => 2
            [nazwa] => nazwa
            [cena] => 100.00
        )

    [5] => Array
        (
            [id] => 4
            [nazwa] => nazwa1
            [cena] => 106.00
        )

    [6] => Array
        (
            [id] => 2
            [nazwa] => nazwa
            [cena] => 100.00
        )

) 

W momencie gdy wyszukuję wartość za pomocą kodu:

$dubel = array_search(array('id' =>czysc_sql_liczby($_POST['itemid']), 'nazwa' =>baza_zapis($_POST['i_nazwa']), 'cena' =>baza_zapis($_POST['i_cena'])), $_SESSION['koszykzamowien']);
 

Otrzymuję indeks duplikatu - co jest super. Tylko 100% wartości musi się pokrywać - a chciałbym żeby tylko sprawdzało po 1.
Czy da się jednak szukać tylko i wyłącznie po ID ($_POST[imtemid])- a nie całej wartości dodawanej tablicy?

0

Nie wiem, czy zrozumiałem o co Ci chodzi. Jak chcesz szukać tylko po ID to skorzystaj z
array_search(mixed $wartości , array_column($tablica, string $klucz)); w tym wypadku array_column($_SESSION['koszykzamowien'], 'id')

Northwest widzę, że jesteś głodny wiedzy z zakersu tablic, więc poczytaj trochę tutaj http://php.net/manual/pl/function.array-search.php i tutaj http://php.net/manual/en/ref.array.php, a jak Ci sie nie chce całego, to chociaż to http://www.techrepublic.com/article/17-useful-functions-for-manipulating-arrays-in-php/5792851/ (17 useful functions for manipulating arrays in PHP).

0

OK, dziękuję :)

$dubel = array_search(czysc_sql_liczby($_POST['itemid']), array_column($_SESSION['koszykzamowien'], 'id')); 

Coś takiego?:)

0

Tak, powinno zadziałać. Normalny array_search szuka Ci w tablicy jednowymiarowej, to jest sposób na szukanie w tablicach wielowymiarowych.

0

kurcze, zawsze zwraca mi wartość 0 :(

0

A jaką masz wersję PHP?
Sprawdzasz to:

<?php phpinfo();

Tamto rozwiązanie jest dla PHP > 5.5 z tego co kojarzę. Jak masz wcześniejszą wersję musisz napisać swoją własną funkcję. Szukanie jednej wartości może wyglądać tak:

/**
* Przeszukuję tablicę dwuwymiarową
*
* @param mixed $value szukana wartość
* @param array $array tablica do przeszukania
* @param mixed $array_key klucz w którym ma szukać
* @return array miejsca wystąpenia $value (klucze)
*/
function multi_array_search($value, $array, $array_key) {
   $result = array();
   foreach ($array as $key => $val) {
       if ($val[$array_key] === $value) {
           array_push($result, $key);
       }
   }
   return $result;
}

if(PHP >= 5.5.0) {

$dubel = array_search(czysc_sql_liczby($_POST['itemid']), array_column($_SESSION['koszykzamowien'], 'id')); 

} else {

$dubel = multi_array_search(czysc_sql_liczby($_POST['itemid'], $_SESSION['koszykzamowien'], 'id');

}

0

Zrobiłem coś takiego:

 

function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}
 
$dubel = recursive_array_search($_POST['itemid'], $_SESSION['koszykzamowien']);
 
        if($dubel === FALSE){
            $_SESSION['koszykzamowien'][] = array('id' =>czysc_sql_liczby($_POST['itemid']), 'nazwa' =>baza_zapis($_POST['i_nazwa']), 'cena' =>baza_zapis($_POST['i_cena']), 'ilosc' =>czysc_sql_liczby($_POST['ilosc']), 'aj_rozmiarX' =>baza_zapis($_POST['aj_rozmiarX']), 'aj_rozmiar_wielkosc_X' =>baza_zapis($_POST['aj_rozmiar_wielkosc_X']));
        } else{
            echo "DUBEL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
            $_SESSION['koszykzamowien'][$dubel]['ilosc'] = 2;
        }

Tylko czy jest możliwość za pomocą tego: recursive_array_search - wyszukanie po 3 kolumnach?

W sensie dubel = przy identycznym id oraz aj_rozmiarX i aj_rozmiar_wielkosc_X?

1 użytkowników online, w tym zalogowanych: 0, gości: 1