当您在循环中迭代数组时,如何知道数组中是否不存在更多值

问题描述 投票:0回答:1

所以,我在数据库中有一个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
}

你能帮帮我吗?任何意见,将不胜感激

arrays laravel collections
1个回答
0
投票

假设你可以从数据库中提取$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) } }

© www.soinside.com 2019 - 2024. All rights reserved.