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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当您在循环中迭代数组时,如何知道数组中是否不存在更多值相关的知识,希望对你有一定的参考价值。

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

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

答案

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

以上是关于当您在循环中迭代数组时,如何知道数组中是否不存在更多值的主要内容,如果未能解决你的问题,请参考以下文章

如何快速将数组归零?

不迭代时如何解决数组中元素的eslint缺少关键道具?

使用PHP与2个foreach循环中的数组进行比较时如何获取迭代次数

我可以检查字符串中是否包含数组的元素吗?

分配给整数时的字符串数组会产生一个奇怪的值[重复]

循环遍历数组对象以检查值匹配仅适用于第一次迭代,后续迭代失败