在不可查找时有效地获取子集


Getting a subset efficiently when non-seekable

我有一个相当大的数组,其结构如下: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中拥有所有可用的数组方法?

尝试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)', ...],
        ...
];