Приветствую! Я новобранец в рядах бэкендеров. Столкнулся с непонятным для меня явлением при работе с массивами.
1. Есть массив товаров корзины. У каждого товара свои ID магазинов самовывоза.
2.Также есть массив ID магазинов из которых возможен самовывоз.
Необходимо проверить у всех ли товаров имеется возможность самовывоза, и если да, то выяснить в какой магазин( ы ) из доступных( второй массив ) оформить самовывоз.
вот массив из товаров и ID магазинов, в котором он в наличии:
array(3) {
[0]=>
array(2) {
[0]=>
string(2) "28"
[1]=>
string(2) "29"
}
[1]=>
array(2) {
[0]=>
string(2) "28"
[1]=>
string(2) "29"
}
[2]=>
array(1) {
[0]=>
string(2) "29"
}
}
Вот массив с пунктами самовывоза:
array(2) {
[0]=>
string(2) "28"
[1]=>
string(2) "29"
}
Мой код, который почему-то работает))
// если в массиве товаров нет магазинов, то пустая строка
foreach( $productAr as $product ) {
if (!isset($product["STORES"]) ){
$inStores[] = '';
} else {
$inStores[] = $product["STORES"];
}
}
// есть ли у товаров магазины
if( !empty($inStores) ) {
$i = 0;
$s = 0;
foreach ($inStores as $item) {
if (empty($item[$i])) {
break;
}
// какой магазин из доступных к самовывозу имеется у всех товаров
$s++; // тут вся суть вопроса! если итерацию делаю как положено, после поиска в массиве, то в результате в $arPickupID получаю все ID, с которыми идёт сравнение. А в этом варианте возвращает единственно общий
if (in_array($storesAvailable[$s], $item)) {
$arPickupID[] = $storesAvailable[$s];
}
$i++;
}
}
Я не нашёл ответов на просторах гугла. Безумно интересно почему это работает так.