$string = '763:74
74:274
177:474';
$number = array('763', '74', '177');
我需要从$number
获取$string
的相应值。示例:如果number = 763
我需要string value 74
。如果number = 74
我需要string value 274
等等。
现在我正在做的是爆炸 $string
:
字符,循环和匹配。
寻找更好的解决方案。
答案 0 :(得分:2)
您只需使用preg_replace_callback
(例如
$string = '763:74
74:274
177:474';
$result = [];
preg_replace_callback('/(\d+):(\d+)/m',function($m)use(&$result){
$result[$m[1]] = $m[2];
},$string);
print_r($result);
输出:
Array
(
[763] => 74
[74] => 274
[177] => 474
)
答案 1 :(得分:1)
这应该适合你:
首先我将字符串与preg_split()
分开并使用新行作为分隔符(\n
),其中我也消耗了右侧和左侧的所有空格(\s*
),因此你没有钥匙:
preg_split("/\s*\n\s*/", $string)
然后我用array_map()
和explode()
用冒号遍历每对数字{x:y
)。所以你最终会得到一个像这样的数组:
Array
(
[0] => Array
(
[0] => 763
[1] => 74
)
[1] => Array
(
[0] => 74
[1] => 274
)
[2] => Array
(
[0] => 177
[1] => 474
)
)
最后,我使用array_column()
来表示您希望将第0列用作键,将第1列用作值。
代码:
<?php
$string = '763:74
74:274
177:474';
$result = array_column(
array_map(function($v){
return explode(":", $v);
}, preg_split("/\s*\n\s*/", $string)
), 1, 0);
print_r($result);
?>
输出:
Array
(
[763] => 74
[74] => 274
[177] => 474
)
答案 2 :(得分:1)
您可以使用preg_match
执行此操作 - 首先找到键字符串的位置,然后找到具有该键的对,以便知道该对的长度。:
function find_in_string($n,$string){
preg_match("/(^|\s+)($n)(?=:)/",$string,$m1,PREG_OFFSET_CAPTURE);
preg_match("/(^|\s+)($n\:\d+)/",$string,$m2);
return substr($string,$m1[2][1]+ strlen($n)+1,strlen($m2[2])-strlen($n));
}
示例:
$string = '763:74
74:274
177:474';
foreach(array('763', '74', '177') as $n){
echo find_in_string($n,$string);
}
输出:
74
274
474
演示:
http://sandbox.onlinephpfunctions.com/code/320e8ba1b47e62b75459aaf70f07994fe531b101