比较相同值的PHP数组

比较相同值的PHP数组,php,laravel,laravel-5,Php,Laravel,Laravel 5,我有一个名为parts的数组,包含7000项。我有另一个名为images的数组,它包含34000个项目。我要做的是从数组1中获取零件号,然后查看图像数组中是否有匹配项。如果找到匹配项,则将图像路径和零件id插入表中。以下是一个例子: 这是零件数组的一项 array:8 [▼ "id" => 1 "rank" => 0 "product_category_id" => "5" "name" => "BRACKETS, METAL" "part_num"

我有一个名为parts的数组,包含7000项。我有另一个名为images的数组,它包含34000个项目。我要做的是从数组1中获取零件号,然后查看图像数组中是否有匹配项。如果找到匹配项,则将图像路径和零件id插入表中。以下是一个例子:

这是零件数组的一项

array:8 [▼
  "id" => 1
  "rank" => 0
  "product_category_id" => "5"
  "name" => "BRACKETS, METAL"
  "part_num" => "100G"
  "description" => "Gold Line aluminum bracket back mounting"
  "created_at" => "-0001-11-30 00:00:00"
  "updated_at" => "-0001-11-30 00:00:00"
]
图像阵列

array:7 [▼
  0 => "100G_3Q_H.jpg"
  1 => "13VX_3Q_L.jpg"
  2 => "2025_TS_1.jpg"
]
如你所见,我正在尝试查看part_num 100G是否与图像数组中的图像名称匹配。如果它确实从零件数组中获取图像名称和零件id

foreach ($parts as $part) {
    if (isset($map[$part['part_num']]) {
        $images_array = $map[$part['part_num']];
        // insert whichever of the images you want
    }
}
非常感谢您的帮助

顺便说一句,我使用的是Laravel 5.2


谢谢

因为图像文件名的格式是一致的,所以您可以预处理图像数组以将零件号映射到相应的文件名

foreach ($images as $filename) {
    $partnum = strtok($filename, '_');
    $map[$partnum][] = $filename; 
}
这将创建一个数组,其中零件号作为键,文件名数组作为值

这样,当您迭代零件数组时,查找匹配值将更加有效

foreach ($parts as $part) {
    if (isset($map[$part['part_num']]) {
        $images_array = $map[$part['part_num']];
        // insert whichever of the images you want
    }
}

首先创建一个包含所有零件号的数组

然后循环浏览图像,拆分零件号并检查零件号数组中是否存在零件号

如果有,则将其添加到该零件号的图像数组中

然后,您可以过滤掉空零件号数组,或者在将图像添加到数据库时丢弃它们

foreach ($parts as $part) {
  $imageMatches[$part['part_num']] = [];
}

foreach ($partImages as $image) {
  $imageParts = explode('_', $image);
  $imageNum = $imageParts[0];

  if (array_key_exists($imageNum, $imageMatches)) {
    array_push($imageMatches[$imageNum], $image);
  }
}

图像文件名的格式似乎不一致。是否有关于如何将零件号包含在文件名中的具体规则?它总是在一开始吗?是第一个
\uu
-
之前的整个学期吗?是。零件号位于文件名的开头,后面有下划线。每个图像名称都遵循此模式OK。我之所以特别问这个问题,是因为你的例子中的
2025TS-1.jpg
。很抱歉。我忘了加下划线,我刚更新了我的帖子。谢谢你,不要担心;只是想确定一下。还有两个问题:这是一次性操作吗?是否有可能有多个图像与零件号匹配?太棒了!非常感谢你们的帮助。没问题,很高兴能帮上忙