比较相同值的PHP数组
我有一个名为parts的数组,包含7000项。我有另一个名为images的数组,它包含34000个项目。我要做的是从数组1中获取零件号,然后查看图像数组中是否有匹配项。如果找到匹配项,则将图像路径和零件id插入表中。以下是一个例子: 这是零件数组的一项比较相同值的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"
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
。很抱歉。我忘了加下划线,我刚更新了我的帖子。谢谢你,不要担心;只是想确定一下。还有两个问题:这是一次性操作吗?是否有可能有多个图像与零件号匹配?太棒了!非常感谢你们的帮助。没问题,很高兴能帮上忙