从php中的字符串中获取数字

时间:2015-11-21 08:02:46

标签: php

$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 :字符,循环和匹配。

寻找更好的解决方案。

3 个答案:

答案 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
)

Demo

答案 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