在不可搜索时有效地获取子集

Posted

技术标签:

【中文标题】在不可搜索时有效地获取子集【英文标题】:Getting a subset efficiently when non-seekable 【发布时间】:2014-12-05 21:06:19 【问题描述】:

我有一个相当大的数组,我的结构是这样的: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)', ...],
        ...
];

【讨论】:

抛出未定义的索引,这看起来确实可能是答案或返回空 它在这里工作(带有您的 pastebin 数组)。你的$attrSizes$array-&gt;Size 设置好了吗? 是的,我的问题,我刚刚发现它;)谢谢! +1 并接受了先生 你的评论不错,我会交换数组结构

以上是关于在不可搜索时有效地获取子集的主要内容,如果未能解决你的问题,请参考以下文章

寻找一种有效的数据结构来进行快速搜索

搜索子集、算法(最优或启发式)

大量多级分类数据的获取缓存搜索查询 怎么设计最快 ?

在任何列中搜索关键字的数据框并获取行

问题列表

获取 Firestore 子集合