如何从具有多个同名项的数组中获取正确的项-PHP

如何从具有多个同名项的数组中获取正确的项-PHP,php,regex,Php,Regex,我从服务获取有关产品详细信息的数据。当我分解CSV数据并打印一个条目时,一个产品的数组的结构如下,包含更多数据 [Product_name] => Product1 [Manufacturer] => Manufacturer <<more elements>> [Image URL #1] => http://www.image1.jpg [Image Label #1] => PRODUCT_IMAGE [Image_info La

我从服务获取有关产品详细信息的数据。当我分解CSV数据并打印一个条目时,一个产品的数组的结构如下,包含更多数据

 [Product_name] => Product1
 [Manufacturer] => Manufacturer
 <<more elements>>
 [Image URL #1] => http://www.image1.jpg
 [Image Label #1] => PRODUCT_IMAGE
 [Image_info Label #1] => Marketing Image High Res
 [Image URL #2] => https://www.image2.jpg
 [Image Label #2] =>PRODUCT_IMAGE
 [Image_info Label #2] =>Mobile Image
 [Image URL #3] =>https://www.image3.jpg
 [Image Label #3] => PRODUCT_IMAGE
 [Image_info Label #3] => Marketing Image High Res

循环所有键并搜索第一次出现的
PRODUCT\u图像
作为值。然后使用
preg_match
获取键中指定的Id,以获取相应的url字段:

$image=null;
foreach($key=>$value的数组){
$match=null;
如果(preg_match(“/^Image Label”(\d+)$/”,$key,$match)和&$value=='PRODUCT_Image'){
$image=$array['image URL'.$match[1]];
打破
}
}
回波图像;

您可以在阵列中循环,查找
产品图像的图像标签,然后检查相应的图像信息标签是否为
营销图像高分辨率。如果是这样,我们中断循环并输出匹配的图像URL值:

for ($i = 1; ; $i++) {
    if (!isset($input["Image Label #$i"])) break;
    if ($input["Image Label #$i"] == 'PRODUCT_IMAGE') {
        if ($input["Image_info Label #$i"] == 'Marketing Image High Res') break;
    }
}
if (isset($input["Image Label #$i"])) {
    echo $input["Image URL #$i"];
}
输出:

http://www.image1.jpg
http://www.image1.jpg

如果无法保证图像标签号以1开头,并且是连续的,则在这种情况下,另一个更复杂的解决方案如下所示:

这里有一种方法可以做你想做的事。我们使用
array\u键
查找将
PRODUCT\u IMAGE
作为其值的所有元素,然后
array\u映射
从这些值中除去除数字以外的所有元素。在本例中,我们得到数组
[1,2,3]
。然后,我们对
营销图像高分辨率
执行相同的过程,产生
[1,3]
。然后我们取两个数组的交集的最小值,这是最低的图像,它既是
产品图像
又是
营销图像高分辨率
,在本例中为
1
。最后,我们通过将该值与
'Image URL#'
相结合来呼应相应的URL:

$product_images = array_map(function ($v) { return preg_replace('/^.*#/', '', $v); }, array_keys($input, 'PRODUCT_IMAGE'));
$highres_images = array_map(function ($v) { return preg_replace('/^.*#/', '', $v); }, array_keys($input, 'Marketing Image High Res'));
$min_key = min(array_intersect($product_images, $highres_images));
echo $input["Image URL #$min_key"];
输出:

http://www.image1.jpg
http://www.image1.jpg

我想他们读过,但找不到您尝试过的代码@mickmackusa是一个很好的问题,我最初的答案并不依赖于这个问题……很抱歉我来晚了,我正在尝试@Nicks解决方案。我更新了question@mickmackusa希望您能找到有疑问的信息。您对输入csv的完整/准确预期结果是什么?我不知道您实际需要提取哪些列值,哪些可以忽略。查看您如何为流程的下一步存储符合条件的url也会很有帮助。@mickmackusa旧的“更正了演示中的代码,但忘记将其复制回答案”技巧。这是本周的两次!我试过你的前一个,它奏效了。但是关于mick的评论,它可能会影响。无论如何,我会尝试你的更新解决方案too@Rosh_LK我已经将这个答案合并到这个答案中,以防简单的循环对您不起作用。