【问题标题】:PHP select array element by ["something_*"]PHP 通过 ["something_*"] 选择数组元素
【发布时间】:2012-12-05 17:10:23
【问题描述】:

我想知道这种情况。

如果我有一个关于50k 或更多项目的庞大数组怎么办。

现在假设许多数组键都有前缀,我们将其命名为settings_,现在如果我想选择键以settings_ 开头的所有值,我需要循环遍历所有50k 项目还是有一个更好的方法?

如果说有一些“神奇”的方法可以用单级数组做到这一点,那么多维数组呢?

【问题讨论】:

标签: php arrays


【解决方案1】:

preg_grep,它匹配数组值。既然要搜索键,就需要用array_flip反转键和值:

<?php
$array = array(
    'armenia' => 0,
    'argentina' => 1,
    'brazil' => 2,
    'bolivia' => 3,
    'congo' => 4,
    'denmark' => 5
);
$filtered = array_flip(preg_grep('/^b/', array_flip($array)));

var_dump($filtered);
/*
Output:

array(2) {
  ["brazil"]=>
  int(2)
  ["bolivia"]=>
  int(3)
}
*/

【讨论】:

  • 我想知道它如何执行与循环遍历所有数组并选择你需要的东西
  • @Linas 我做了一个快速测试,preg_grep + array_flip 的性能比循环好得多。但我不知道它在大数组中的表现如何。
【解决方案2】:
$arr_main_array = array('something_test' => 123, 'other_test' => 456, 'something_result' => 789);

foreach($arr_main_array as $key => $value){
    $exp_key = explode('_', $key);
    if($exp_key[0] == 'something'){
        $arr_result[] = $value;
    }
}

if(isset($arr_result)){
   print_r($arr_result);
}

您可以在以下位置执行代码 http://sandbox.onlinephpfunctions.com/code/884816dd115b3ccc610e1732e9716471a7b29b0f

【讨论】:

  • 是的,我不是在问如何循环遍历整个数组...但是无论如何感谢您的努力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
相关资源
最近更新 更多