2014-10-10 53 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