Как узнать, что в массиве больше нет значений во время итерации массива в цикле - PullRequest
0 голосов
/ 14 апреля 2019

Итак, у меня есть таблица locations в базе данных, которая содержит seller_id. Многие местоположения могут иметь один и тот же seller_id, в то время как местоположения уникальны.

В функции я получаю входной массив, который является списком местоположений, и у каждого местоположения есть свой массив, который является списком вариантов. Пример

$data = [
    23 => [40 => 1, 25 => 2],
    6 => [22 => 3, 24 => 4],
    28 => [22 => 3, 24 => 4],
    18 => [22 => 3, 24 => 4],
]

Итак, 23,6,28 and 18 - это местоположения, а 40,25,22,24 - это варианты.

Проблема здесь в том, что мне нужен массив seller_id, и каждый seller_id будет иметь массив их соответствующих вариантов. И мне нужно сделать это оптимизированным способом.

Я полагаю, что-то в этом роде,

$locationIDs = collect($inventoryData)->keys();
$locationBySellers = Location::whereIn('id', $locationIDs)->pluck('seller_id','id');
foreach ($locationBySellers as $location => $seller) {
    $variants = array_keys($data[$location]);
    echo "Seller: ".$seller.", Variants: ".$variants."\n";
    //How to know if no more sellers are present with value $seller
}

Можете ли вы помочь мне с этим. Любой совет будет оценен

1 Ответ

0 голосов
/ 14 апреля 2019

Предположим, $data - это то, что вы можете извлечь из базы данных. Следующий код получит seller_id и соответствующие им варианты.

$data = [
    23 => [40 => 1, 25 => 2],
    6 => [22 => 3, 24 => 4],
    28 => [22 => 3, 24 => 4],
    18 => [22 => 3, 24 => 4],
];

foreach ($data as $location => $seller) {
    $variants = array_keys($data[$location]);
    foreach($seller as $variant=>$id) {
        if(!isset($sellers[$id])) $sellers[$id]=[];
        if(!in_array($variant,$sellers[$id])) array_push($sellers[$id],$variant);
    }
   // echo "Seller: ".$seller.", Variants: ".$variants."\n";
   //How to know if no more sellers are present with value $seller
}
var_dump($sellers);

И он выдаст array(4) { [1]=> array(1) { [0]=> int(40) } [2]=> array(1) { [0]=> int(25) } [3]=> array(1) { [0]=> int(22) } [4]=> array(1) { [0]=> int(24) } }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...