在数组中搜索匹配的部分值

时间:2016-12-22 12:55:26

标签: php arrays

$target = 285
$array = array("260-315", "285-317", "240-320")

我需要在数组中搜索以$ target值开头的值。此外,$target值不会限制为3位数,因此我会在连字符之前搜索数字的匹配。

所以我想以

结束
$newTarget = 285-317
$finalTarget = 317

注意:我只是在连字符之前搜索数字的匹配,所以" 200-285"不会是一场比赛

6 个答案:

答案 0 :(得分:1)

你在评论中提到了我(在我的回答下面),因为你可以像下面那样(我的答案更改): -

<?php
$target = 285;
$array = array('260-315', '285-317', '240-320',"200-285");
foreach($array as $key=>$value){
    if($target ==explode('-',$value)[0]){
       echo $newTarget = $array[$key];
       echo PHP_EOL;
       echo $finalTarget = explode('-',$array[$key])[1];
    }
}
?>

https://eval.in/702862

答案 1 :(得分:0)

我可以帮助您将阵列过滤到以目标开头的成员。

然后,您可以拆分返回值以获得最终目标。

<?php
$target = '285';
$array = array('260-315', '285-317', '240-320');


$out = array_filter($array, function($val) use ($target) {
    return strpos($val, $target) === 0;
});

var_export($out);

输出:

array (
  1 => '285-317',
)

答案 2 :(得分:0)

您可以排除与array_filter不匹配的内容,而不是查找匹配内容。

例如:

$target = 285;

$original = array('260-315', '285-317', '240-320');

$final = array_filter($original, function ($value) use ($target) {

    // Check if match starts at first character. Have to use absolute check
    // because no match returns false
    if (stripos($value, $target) === 0) {

       return true;

    }

    return false;

});

$final数组将是$original数组的副本,而不包含不匹配的值。

要输出第一个数字,您可以遍历您的匹配数组并获取连字符前的值:

foreach ($final as $match) {

    $parts = explode('-', $match);

    if (is_array($parts) && ! empty($parts[0])) {

        // Show or do something with value
        echo $parts[0];

    }
}

答案 3 :(得分:0)

这样的事可能对你有用吗? array_filter

$target = 285;
$array = array("260-315", "285-317", "240-320");
$newTarget = null;
$finalTarget = null;

$filteredArray = array_filter($array, function($val) use ($target) {
    return strpos($val, $target."-") === 0;
});

if(isset($filteredArray[0])){
    $newTarget = $filteredArray[0];
    $finalTarget = explode($filteredArray[0], "-")[1];
}

答案 4 :(得分:0)

<?php
$target = 285;
$arrStack = array(
    "260-315",
    "285-317",
    "240-320",
);


$result = preg_grep('/'.$target.'/',$arrStack);

echo "<pre>"; print_r($result); echo "</pre>";

答案 5 :(得分:0)

使用array_filter

示例:

$target = '260';
$array = ['260-315', '285-317', '240-320'];

$matches = array_filter($array, function($var) use ($target) { return $target === explode('-', $var)[0]; });

print_r($matches);

输出:

Array
(
    [0] => 260-315
)