Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数组中搜索匹配的部分值_Php_Arrays - Fatal编程技术网

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

Php 在数组中搜索匹配的部分值,php,arrays,Php,Arrays,我需要在数组中搜索以$target值开头的值。另外,$target值将不限于3位数字,因此我正在搜索连字符前的数字匹配 所以我想以 $target = 285 $array = array("260-315", "285-317", "240-320") 注意:我只是在搜索连字符前的数字匹配,因此“200-285”不是匹配的我可以帮助您筛选数组中以目标开头的成员 然后可以拆分返回值以达到最终目标 $newTarget = 285-317 $finalTarget = 317 您可以排除与ar

我需要在数组中搜索以$target值开头的值。另外,
$target
值将不限于3位数字,因此我正在搜索连字符前的数字匹配

所以我想以

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

注意:我只是在搜索连字符前的数字匹配,因此“200-285”不是匹配的

我可以帮助您筛选数组中以目标开头的成员

然后可以拆分返回值以达到最终目标

$newTarget = 285-317
$finalTarget = 317

您可以排除与
array\u filter
不匹配的内容,而不是查找匹配的内容

例如:

array (
  1 => '285-317',
)
$final
数组将是
$original
数组的副本,不包含不匹配的值

要输出第一个数字,您可以在匹配数组中循环,并获得连字符前的值:

$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;

});
您在评论中问了我什么(在我的答案下面),因此您可以像下面那样(我更改的答案):-



像这样的东西对你有用吗


使用
数组过滤器

例如:

$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);
输出:

<?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
(
    [0] => 260-315
)

告诉我们你想出了什么…你知道
260-315
(和其他)将被计算为
-55
?类似这样的东西:-(但你的数组值必须是字符串,否则它将被自动减去,并显示-55@u_mulder说)似乎在不计算的情况下工作。我应该如何分隔数字?我想知道我们还能挤出多少个
array\u filter
答案来回答这个问题。如果其中一个值是200-285呢?连字符前的数字是目标。我的意思是,我试图找到匹配的唯一数字是连字符前的数字。因此,如果目标为285,则200-285不应匹配。
$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];
}
<?php
$target = 285;
$arrStack = array(
    "260-315",
    "285-317",
    "240-320",
);


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

echo "<pre>"; print_r($result); echo "</pre>";
$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
)