northwest
(northwest)
#1
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?
hindus
(hindus)
#2
No to zawsze możesz klasycznie przeiterować tablicę w poszukiwaniu interesującego Cię kryterium, ewentualnie użyć
$arr = array(‘id’ =>czysc_sql_liczby($_POST[‘itemid’]), ‘nazwa’ =>baza_zapis($_POST[‘i_nazwa’]), ‘cena’ =>baza_zapis($_POST[‘i_cena’]));
$key = array_search(4, array_column($arr, ‘id’));
hindus
(hindus)
#4
Ok, pomyłka z mojej strony, niepotrzebnie próbowałem dawać kod zamiast objaśnienia, które jest następujące:
$INDEKS_ZNALEZIONEGO_ELEMENTU = array_search($SZUKANEID, array_column($TABLICA_2D_W_KTOREJ_SZUKASZ, $NAZWA_KOLUMNY));
northwest
(northwest)
#5
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?
hindus
(hindus)
#6
Kopiujesz gotowce bez zrozumienia, mam wrażenie. Napiszę w pseudokodzie, żebyś mógł się czegoś nauczyć.
funkcja toDuplikat(tablica_elementow, pole1, pole2, pole3){
dla każdego elementu w tablicy tablica_elementów {
jeśli tablica_elementów[‘nazwa_pola1’] == pole1
|| tablica_elementow[‘nazwa_pola2’] == pole2
|| tablica_elementow[‘nazwa_pola3’] == pole3
zwróć prawda;
}
zwróć fałsz;
}