Php 如何通过删除以特定字符串开头的几个元素,从现有数组创建新数组?

Php 如何通过删除以特定字符串开头的几个元素,从现有数组创建新数组?,php,arrays,Php,Arrays,我有一个包含以下数据的数组。我需要删除那些其值以16或17或除18以外的任何其他值开头的元素 array(24) { [0]=> string(10) "1849781487" [1]=> string(10) "1838433023" [2]=> string(10) "1855575775" [3]=> string(10) "1825054296" [4]=> string(10) "1868575843" [5]=

我有一个包含以下数据的数组。我需要删除那些其值以
16
17
或除
18
以外的任何其他值开头的元素

array(24) {
  [0]=>
  string(10) "1849781487"
  [1]=>
  string(10) "1838433023"
  [2]=>
  string(10) "1855575775"
  [3]=>
  string(10) "1825054296"
  [4]=>
  string(10) "1868575843"
  [5]=>
  string(10) "1800003509"
  [6]=>
  string(10) "1781354776"
  [7]=>
  string(10) "1650813649"
  [8]=>
  string(10) "1762706044"
  [9]=>
  string(10) "1688111114"
  [10]=>
  string(10) "1669462381"
  [11]=>
  string(10) "1632164916"
}
我想删除那些前两位值不是以18开头的元素,并创建一个新数组,如下所示:

array(24) {
  [0]=>
  string(10) "1849781487"
  [1]=>
  string(10) "1838433023"
  [2]=>
  string(10) "1855575775"
  [3]=>
  string(10) "1825054296"
  [4]=>
  string(10) "1868575843"
  [5]=>
  string(10) "1800003509"
}
尝试使用下面的代码段,但对我无效

$filename = "/home/MYSPORTS/MySPORTS/New_Activation/bulk_test.txt";
$lines    = file($filename, FILE_IGNORE_NEW_LINES);
$searchword = '18';
$matches = array();
foreach($lines as $k=>$v) {
    if(preg_match("/\b$searchword\b/i", $v)) {
        $matches[$k] = $v;
    }
}

我如何通过php实现这一点?

在正则表达式中使用单词边界
\b
,但在
1800003509
中没有介于18和0之间的单词边界

您可以使用锚来断言行的开头,或者删除第二行

您可以替换此行:

if(preg_match("/\b$searchword\b/i", $v)) {
使用以下其中一行:

if(preg_match("/^$searchword/i", $v)) {
if(preg_match("/\b$searchword/i", $v)) {

或者使用正则表达式匹配以18开头的所有10位数字:

除了使用正则表达式,您还可以使用:


因为它总是前两个位置,所以一个简单的substr可以工作

$filename = "/home/MYSPORTS/MySPORTS/New_Activation/bulk_test.txt";    
$lines    = file($filename, FILE_IGNORE_NEW_LINES);
$searchword = '18';
foreach($lines as $line) {
        if (substr($line,0,2) == $searchword) {
        $matches[] = $line;
    }
}
print_r($matches);
导致

Array
(
    [0] => 1849781487
    [1] => 1838433023
    [2] => 1855575775
    [3] => 1825054296
    [4] => 1868575843
    [5] => 1800003509
)

您可以这样做,而无需像这样加载正则表达式引擎

$input = ['1849781487', '1849784487', '1749781487','9184781487', '1849581487',];
$filtered = [];
$search = '18';
foreach ($input as $in) {

    if (strpos($in,$search) === 0) {
        $filtered[] = $in;
    }    
}
print_r($filtered);
结果

Array
(
    [0] => 1849781487
    [1] => 1849784487
    [2] => 1849581487
)

好的,我们已经有了规范,你试着写代码了吗?是的!我已经试过了,但那不能实现我的目标。代码在我的帖子中更新@RiggsFollyWell向我们展示代码,然后我们可以建议修复。。。编辑问题不要在评论中添加代码请立即检查@这就是我读到的他想要的。引用“我需要删除那些值以16或17开头的元素,或者除18以外的任何其他值。”谢谢!但是您的代码只打印最后一个匹配的元素。你能检查一下吗?哦,让我检查一下不。我使用的示例代码中只有一个
18..
。我又添加了一些,它得到了所有以
18
开头的项目,谢谢!现在它的工作如预期。回答这个问题的其他开发人员很有帮助,但他们并没有更新新创建的数组索引值。
Array
(
    [0] => 1849781487
    [1] => 1849784487
    [2] => 1849581487
)