2014-10-10 49 views
0

我有一个相当大的数组,我的结构如下:http://pastebin.com/EQjerbcE我想找到一个更有效的方式取出此数组的子集/切片。目前我这样做:当不可查找时有效地获取子集

$valToken = $attrSizes[$array->Size]; //14 

$sizeNames = []; 
foreach ($attrSizes AS $key => $value) 
{ 
    if ($valToken === $value) 
    { 
     $sizeNames[] = $key; 
    } 

    if ($valToken < $value) break; 
} 

在我看来,循环不应该是答案,因为它是相当低效。我虽然在$valToken小于$value之后添加了一个子句,以确保在不需要时不会运行完整循环。尽管我们在PHP中有所有可用的数组方法,但必须有更智能,更高效的方法来完成此操作。

回答

1

尝试array_keys

$sizeNames = array_keys($attrSizes, $array->Size, true); 

顺便说一句:我会结构阵列那样:

$attrSizes = [ 
     0 => ['*NONE', ], 
     1 => ['XS (101)', 'S (102)', 'M (103)', 'L (104)', 'XL (105)', 'XXL (106)', 'XXXL (107)', ], 
     2 => ['Small x 31 (110)', 'Small x 33 (111)', ...], 
     ... 
]; 
+0

抛出不确定的指数,这看起来像它可能是答案,虽然或返回空 – ehime 2014-10-10 16:38:13

+0

它在这里工作(w /你的pastebin数组)。你的'$ attrSizes'和'$ array-> Size'被设置了吗? – 2014-10-10 16:39:51

+0

我的问题是,我刚抓住它;)谢谢! +1并接受爵士 – ehime 2014-10-10 16:43:39