我需要弄清楚将多个键具有相同值的数组放在一起的最佳方法。例如,如果提供以下任何值,我需要返回 LARGE :
"lrge", "lrg", "lg"
我认为它应该采用多维数组的形式。类似的东西:
$myArr= array (
"color" = array (
"RED" => array("red", "rd", "r"),
"BLUE" => array("blue", "blu", "bl")
),
"size" = array (
"LARGE" => array("lrge", "lrg", "lg"),
"SMALL" => array("smal", "sml", "sm")
)
);
关于如何使用它的空白时刻:
$cat = "size";
$val = "lrg";
echo ... // need to return LARGE
答案 0 :(得分:2)
如果$myArr
的唯一用途是将从API获得的值映射到某些标准值,那么最好的方法是创建一个查找表,将输入值映射到所需的标准化值:
$myArr = array(
'color' => array(
'red' => 'RED', 'rd' => 'RED', 'r' => 'RED',
'blue' => 'BLUE', 'blu' => 'BLUE', 'bl' => 'BLUE',
),
'size' => array(
'lrge' => 'LARGE', 'lrg' => 'LARGE', 'lg' => 'LARGE',
'smal' => 'SMALL', 'sml' => 'SMALL', 'sm' => 'SMALL',
),
);
这样,规范化就像:
一样简单$cat = 'size';
$val = 'lrg';
$normal = $myArr[$cat][$val];
答案 1 :(得分:1)
就个人而言,我会考虑将这些映射存储在数据库中。长期来看,它可能会让你的生活更轻松。但是,由于您已经知道要搜索哪个属性,因此这实际上非常简单。只需循环遍历$cat
变量指定的子数组,然后使用in_array()
查看该行中是否$val
。
$myArr= array (
"color" => array (
"RED" => array("red", "rd", "r"),
"BLUE" => array("blue", "blu", "bl")
),
"size" => array (
"LARGE" => array("lrge", "lrg", "lg"),
"SMALL" => array("smal", "sml", "sm")
)
);
$cat = "size";
$val = "lrg";
$match = "";
foreach($myArr[$cat] as $key => $row)
{
if(in_array($val, $row))
{
$match = $key;
break;
}
}
echo $match;