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
)