如何从具有多个同名项的数组中获取正确的项-PHP
我从服务获取有关产品详细信息的数据。当我分解CSV数据并打印一个条目时,一个产品的数组的结构如下,包含更多数据如何从具有多个同名项的数组中获取正确的项-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
[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我已经将这个答案合并到这个答案中,以防简单的循环对您不起作用。