多维数组和用法

时间:2018-03-14 14:59:15

标签: php

我需要弄清楚将多个键具有相同值的数组放在一起的最佳方法。例如,如果提供以下任何值,我需要返回 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

2 个答案:

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

DEMO