Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

northwest

Przeszukiwanie tablicy w php

Polecane posty

Witam serdecznie,

Mam taką tablicę:


array(2) {
[0]=>
array(11) {
["id"]=>
string(1) "2"
["nazwa"]=>
string(5) "nazwa"
["cena"]=>
string(6) "100.00"
["ilosc"]=>
int(4)
["maxilosc"]=>
string(3) "444"
["dostawa"]=>
string(4) "5.00"
["vat"]=>
string(2) "23"
["stanproduktu"]=>
string(1) "1"
["aj_nazwa"]=>
string(9) "niebieski"
["aj_rozmiarX"]=>
string(3) "127"
["aj_rozmiar_wielkosc_X"]=>
string(1) "3"
}
[1]=>
array(11) {
["id"]=>
string(1) "4"
["nazwa"]=>
string(6) "nazwa1"
["cena"]=>
string(6) "106.00"
["ilosc"]=>
string(1) "1"
["maxilosc"]=>
string(1) "9"
["dostawa"]=>
string(4) "0.00"
["vat"]=>
string(1) "0"
["stanproduktu"]=>
string(1) "1"
["aj_nazwa"]=>
string( "czerwony"
["aj_rozmiarX"]=>
string(3) "136"
["aj_rozmiar_wielkosc_X"]=>
string(1) "1"
}
}

i kod:

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

Funkcja recursive_array_search - funkcja wyszukuje duplikaty dla ID - i działa poprawnie.

Chciałbym ją przerobić tak, żeby wyszukiwała duplikaty po 3 kolumnach:

- id

- aj_nazwa

- aj_rozmiar_wielkosc_X

Próbowałem to przerobić tak:

[/color][color=#8D8D8D]
function recursive_array_search($needle, $haystack, $where1, $where2) {[/color][color=#8D8D8D]
foreach($haystack as $key => $value) {[/color][color=#8D8D8D]
$current_key=$key;[/color][color=#8D8D8D]
// $where1 = aj_nazwa[/color][color=#8D8D8D]
// $where2 = aj_rozmiar_wielkosc_X[/color][color=#8D8D8D]
if($needle===$value OR ((is_array($value) && recursive_array_search($needle,$value) !== false) AND ($key['aj_nazwa'] == $where1 && $key['aj_rozmiar_wielkosc_X'] == $where2))) {[/color][color=#8D8D8D]
return $current_key;[/color][color=#8D8D8D]
}[/color][color=#8D8D8D]
}[/color][color=#8D8D8D]
return false;[/color][color=#8D8D8D]
}[/color][color=#8D8D8D]

ale niestety nie chce działać :(

Potrafiłby ktoś to poprawić?

Bardzo proszę o pomoc.

Łukasz

Link do komentarza
Udostępnij na innych stronach

W php wprawdzie nic nie robiłem od dawna, ale tak na szybki rzut oka to nie w tym miejscu chcesz warunki stawiać - prościej będzie ifować wywołanie funkcji, niż jej wnętrze. Swoją drogą wywaliłbyś te znaczniki htmlowe czy co to jest, bo nieprzejrzyste okrutnie, a wraz z ogólnym paskudztwem phpa ciężko w ogóle na to patrzeć wink_prosty.gif

imho coś takiego powinno spełnić założenia:


[/color]
[color=#8D8D8D]
function recursive_array_search($needle,$haystack) {[/color][color=#8D8D8D]
foreach($haystack as $key=>$value) {[/color][color=#8D8D8D]
$current_key=$key;[/color][color=#8D8D8D]
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false) ) {[/color][color=#8D8D8D]
return $current_key;[/color][color=#8D8D8D]
}[/color][color=#8D8D8D]
}[/color][color=#8D8D8D]
return false;[/color][color=#8D8D8D]
}[/color]
[color=#8D8D8D]

if(((recursive_array_search($_POST['itemid'], $_SESSION['koszykzamowien'])) === FALSE) && (recursive_array_search($_POST['aj_nazwa'], $_SESSION['koszykzamowien'])=== FALSE) && (recursive_array_search($_POST['aj_rozmiar_wielkosc_X'], $_SESSION['koszykzamowien']) === FALSE)){
$dubel = FALSE;
} else {
$dubel = TRUE;
}

[color=#8D8D8D]
if($dubel === FALSE){[/color][color=#8D8D8D]
$_SESSION['koszykzamowien'][] = array('id' =>($_POST['itemid']), 'nazwa' =>($_POST['i_nazwa']), 'cena' =>($_POST['i_cena']), 'ilosc' =>($_POST['ilosc']), 'aj_rozmiarX' =>($_POST['aj_rozmiarX']), 'aj_rozmiarX' =>($_POST['aj_rozmiar_wielkosc_X']));[/color][color=#8D8D8D]
} else {[/color][color=#8D8D8D]
echo "DUBEL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";[/color][color=#8D8D8D]
$_SESSION['koszykzamowien'][$dubel]['ilosc'] = 2;[/color][color=#8D8D8D]
}[/color][color=#8D8D8D]

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...