您好我无法编写返回所有子字符串的PHP代码(紧接在10位数之前)。
输入字符串是" 8826835575 jagadish jagadish82017@gmail.com varanasi 221311是na是1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456是na是1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311是na是1 na"
所需的输出:
substring 1 =" 8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na" substring 2 =" 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na" substring 3 =" 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na"
请帮帮我......
答案 0 :(得分:1)
preg_split()
很好但很神秘。这是另一种解决方案:
<?php
$input = "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";
// 1. Replaces all 10 digits preceded by an space by an carriage return.
$output = preg_replace('#\s(\d{10})#', "\n$1", $input);
// 2. Stores the string by line by line in an array.
$output = explode("\n", $output);
// array (
// 0 => '8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na',
// 1 => '9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na',
// 2 => '9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na',
// )
var_export($output);
答案 1 :(得分:0)
我认为您可以使用正则表达式分割的PHP函数轻松解决问题,preg-split使用模式/[0-9]{10}/
:
<?php
$subject = "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";
$pattern = '/([0-9]{10})/';
$val = preg_split ( $pattern , $subject, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
for ($i=0; $i < count($val); $i+=2){
print($val[$i].$val[$i+1]);
}
?>
首先通过preg_split
拆分整体字符串,将10位数的任意组合作为分隔符。请注意,我们在此处使用选项PREG_SPLIT_DELIM_CAPTURE
和PREG_SPLIT_NO_EMPTY
来捕获数字,以满足您的要求。
然后你有一个如下组织的数组:
[0] => first delimiter // your number
[1] => what follows
[2] => second delimiter // your second number
[3] => what follows
...
你只需要按照自己喜欢的方式合并生成的数组(我用dumb for cycle,你可以找到一个更好的PHP-nic方法来实现它)。结果将如下所示:
8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na
9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na
9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na
答案 2 :(得分:0)
带有选项preg_split
的PHP函数PREG_SPLIT_DELIM_CAPTURE
返回一个交替10位数字,字符串等的数组。
$subject = '8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na';
$result = preg_split( '/(\d{10})/', $subject ,'-1' , PREG_SPLIT_DELIM_CAPTURE);
array_shift($result);
for ( $ii = 0; $ii < count($result); $ii++ ) {
print $result[$ii] . $result[++$ii] . '<br>';
}
第一个元素为空,因此shift
关闭,然后遍历数组打印对。这些可以保存到另一个数组或变量而不是在这里打印。
输出:
8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na
9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na
9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na
答案 3 :(得分:0)
如果你想要这个输出,你可以使用这样的东西:
$input = "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";
$splited = preg_split('~(\d{10})~', $input, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);
$lines = array_map(function($item) use ($input) {
return substr($input, $item[1] - 10, 10) . $item[0];
}, $splited);
var_dump($lines);
如果你想创建一个关联数组,这可能是一个更好的输出,这将有所帮助:
$input = "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";
$splited = preg_split('~(\d{10})~', $input, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$i = 0;
$lines = array_reduce($splited, function($carry, $item) use (&$i) {
++$i % 2 ? array_push($carry, $item) : $carry[array_pop($carry)] = $item;
return $carry;
}, array());
var_dump($lines);