比较相同的PHP数组值
问题描述:
我有一个名为部分的数组,并包含7000个项目。我有另一个数组调用图像并包含34000项。我想要做的是从数组1中获取部件号并查看图像数组以查看是否存在匹配。如果找到匹配,则将图像路径和零件ID插入表格。这里有一个例子:比较相同的PHP数组值
零件组列
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。
任何帮助,非常感谢。
BTW我使用Laravel 5.2
感谢
答
首先创建一个所有零件号的数组。
然后遍历图像,拆分零件号码并检查它是否存在于零件号码数组中。
如果确实如此,则将其添加到该零件编号的图像阵列中。
然后,您可以过滤出空的零件号码阵列或在将图像添加到数据库时放弃它们。
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);
}
}
答
由于图像文件名是一致的格式,你可以你的进行预处理图像阵列零件号映射到相应的文件名。
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
}
}
图像文件名的格式看起来不一致。部件号如何包含在文件名中是否有特定的规则?它会永远在一开始吗?是第一个'_'还是'-'之前的整个术语? –
是的。零件号码在文件名后面有一个下划线。每个图像名称都遵循这种模式 – rafiaTech
好的。在我的例子中,我特别要求因为'2025TS-1.jpg'。 –