我的代码很基本。我正在使用一个数组来生成基于它的SKU和文件路径的产品数据表。 我的数组看起来像这样:
$a=array(
"/images/ManualSheets/factSheetCLASSIC.pdf"=>"KE800/6",
"/images/ManualSheets/factSheetMICRO.pdf"=>"KE800/12",
"/images/ManualSheets/factSheetSMALL.pdf"=>"KE4000/12",
"/images/ManualSheets/factSheetMEDIUM.pdf"=>"KE8000/12",
);
第一个Key是文件路径,第二个键是SKU(由系统生成)然后使用if / else生成一个按钮 - 所以如果产品不在数组中,则返回一个空白价值,并没有一个通向无处的按钮
$factsheetweblink_url = array_search($product_sku,$a);
if ($factsheetweblink_url==false) {
echo " ";
}
else {
echo "<div class='productpagestockistBTN'>
<a href=",$factsheetweblink_url,"><img src='/images/FactSheet_btn.png' ></a>
</div>";
}
?>
此代码工作正常。当我的产品具有不同的SKU但具有相同的数据表文件(同一品牌和制造但不同的型号)时,就会出现问题。目前我只能通过上传不同名称的数据表的多个副本来实现它,但它正在成为一个巨大的空间浪费。
我尝试使用数组作为键来保存一个键的多个值..
"/images/ManualSheets/factSheetMEDIUM.pdf"=> array("KE8000/12","KE7000/12"),
但它似乎没有工作......我不太确定我是否需要优化我的if语句以在子数组中搜索或者......?
任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:0)
你应该使用这样的数组:
$products = array(
0 => array(
"pdf" => "/images/ManualSheets/factSheetCLASSIC.pdf",
"skus" => array("KE800/6","KE900/6")
),
1 => array(
"pdf" => "/images/ManualSheets/factSheetCLASSIC3.pdf",
"skus" => array("KE100/6","KE200/6"))
);
这是因为array_search
只返回该键的第一行。
然后只需执行自己的搜索功能:
function findBySku($items, $sku) {
$pdf = ""; // return empty if not found.
foreach($items as $row) {
if (in_array($sku, $row['skus'])) {
$pdf = $row['pdf'];
break;
}
}
return $pdf;
}
并调用该函数:
$pdf = findBySku($products, "some sku");