【问题标题】:Select array values based on another array基于另一个数组选择数组值
【发布时间】:2018-10-10 14:59:31
【问题描述】:

我有 2 个数组:“Array-List”和“Array-Criteria”:

Array-List
(
    [1] => APPLE
    [2] => BANANA
    [3] => ORANGE
    [4] => LEMON
)

Array-Criteria
(
    [0] => 1
    [1] => 3
)

有没有一种快速的方法(我的Array-List 可以包含数千个条目)根据Array-CriteriaArray-List 中选择值,而无需在PHP 中循环遍历Array-List

【问题讨论】:

  • 预期的结果是什么?你看过array_filter吗?
  • $arrayList[$arrayCriteria[1]] => "橙色" - 你是这个意思吗?如果不是:其他条件如何与列表相关联?
  • 什么是$arrayCriteria
  • 您真正在寻找什么?选择什么值?数组如何链接?
  • 如果是SQL,那就是SELECT value FROM Array-List WHERE key IN (SELECT value FROM Array-Criteria)

标签: php


【解决方案1】:

使用array_intersect_keyarray_flip函数获取数据为:

$arr1 = Array-List
(
    [1] => APPLE
    [2] => BANANA
    [3] => ORANGE
    [4] => LEMON
)

$arr2 = Array-Criteria
(
    [0] => 1
    [1] => 3
)



var_dump(array_intersect_key($arr1, array_flip($arr2)));

【讨论】:

  • 非常感谢。这正是我想要的!
【解决方案2】:

如果你遍历条件,你可以建立一个 macthing 项目的列表......

$selected = [];
foreach ( $arrayCriteria as $element ) {
    $selected[] = $arrayList[$element];
}

然后$selected 将是您之后的项目列表。

同样在快速测试中,它的速度大约是使用 array_ 方法的两倍。

【讨论】:

  • 没错,但它仍然是一个循环。我认为 Gufran Hasan 的解决方案更巧妙。
  • 不同意另一个答案很好,但任何解决方案都会涉及循环。
  • 我做了一些速度测试,array_intersect_key 解决方案似乎是最快的。
  • 很难知道,因为它都受到条目数量等的影响。但正如我所说,我试过了,发现这在我的测试中花费了 1/2 的时间。
猜你喜欢
  • 2021-05-24
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多