if / else搜索中数组的多个键

时间:2014-02-21 01:40:56

标签: php arrays if-statement key

我的代码很基本。我正在使用一个数组来生成基于它的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语句以在子数组中搜索或者......?

任何帮助将不胜感激,提前谢谢。

1 个答案:

答案 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");