首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我只想使用1 foreach在数组中找到我的值。

我只想使用1 foreach在数组中找到我的值。
EN

Stack Overflow用户
提问于 2017-04-05 11:08:48
回答 8查看 158关注 0票数 1

我有一个数组让我们假设

代码语言:javascript
运行
复制
$myarr = array(
    '1',
    '2',
    '3',
    '4-7',
    '9',
    '10',
)

$search2 = '2';
$search5 = '5';

我想在我的$myarr中检查这两个变量。使用in_array可以很容易地找到第一个,但是$search5在'4-7‘里面,但是我要做什么来找到这个值呢?我不想要2 foreach,因为我知道我可以使用explode,然后比较开始值和结束值。是否有单行或双线功能可以帮助我实现我所需要的?谢谢

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2017-04-05 11:21:50

PHP代码演示

代码语言:javascript
运行
复制
<?php
ini_set("display_errors", 1);
$search=2;
$result=null;
$myarr = array(
    '1',
    '2',
    '3',
    '4-7',
    '9',
    '10',
);
echo search_in_array($myarr,$search);
function search_in_array($myarr,$search)
{
    $result=false;
    array_map(function($number) use ($myarr,$search, &$result){
        if(preg_match("/^(\d+)\-(\d+)$/", $number,$matches))
        {
            if(in_array($search,range($matches[1],$matches[2]))) 
            {
                $result= true;
            }
        }
        elseif(preg_match("/^(\d+)$/", $number,$matches))
        {
            if(in_array($search,$myarr))
            {
                $result= true;
            }   
        }
    }, $myarr);
    return $result;
}
票数 2
EN

Stack Overflow用户

发布于 2017-04-05 11:43:30

另一个答案是:

代码语言:javascript
运行
复制
$myarr = [
    '1',
    '2',
    '3',
    '4-7',
    '9',
    '10',
];

$search2 = '2';
$search5 = '5';
$search12 = '12';

function myInArray($needle, $haystack) {
    return in_array(
        $needle,
        array_reduce(
            $haystack,
            function($incrementor, $value) {
                return array_merge($incrementor, (strpos($value, '-') !== false) ? range(...explode('-', $value)) : [(int)$value]);
            },
            []
        )
    );
}

foreach([$search2, $search5, $search12] as $searchValue) {
    echo $searchValue, " is ",(myInArray($searchValue, $myarr) ? '' : 'NOT '), "in the array", PHP_EOL;
}

可能没有那么有效,特别是在$myarr中处理更大范围的值时,但是方法略有不同。

演示

票数 1
EN

Stack Overflow用户

发布于 2017-04-05 11:45:54

这里几乎只有一条线,

代码语言:javascript
运行
复制
$search = '5';
$matches  = explode('-',array_values(preg_grep('/[-]/', $myarr))[0]);
if(in_array($search, $myarr)|| in_array($search,range($matches[0],$matches[1]))){
    echo "found";
}else{
    echo "not found";
}

我是由-爆炸,然后用它创建范围,并用in_array检查。

这是工作演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43229443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档