0

我有一个 val 数组,其中包含带下划线的动态字符串。另外,我有一个包含整数的变量 $key。我需要将 $key 与每个 $val (下划线之前的值)匹配。

我做了以下方式:

<?php
    $key = 2; //always a dynamic number
$val = array('3_33', '2_55'); //always a dynamic string with underscore
if(in_array($key, $val)) {
    echo 'Yes'; 
} 
else
{
    echo 'No';  
}
?>

虽然这段代码运行良好,但我想知道它是否是正确的方法或建议一些更好的选择。

4

5 回答 5

1

使用此函数从 php.net 进行正则表达式匹配

function in_array_match($regex, $array) {
    if (!is_array($array))
        trigger_error('Argument 2 must be array');
    foreach ($array as $v) {
        $match = preg_match($regex, $v);
        if ($match === 1) {
            return true;
        }
    }
   return false;
}

然后更改您的代码以使用此功能,如下所示:

$key = 2; //always a dynamic number
$val = array('3_33', '2_55'); //always a dynamic string with underscore
if(in_array_match($key."_*", $val)) {
    echo 'Yes'; 
} 
else
{
    echo 'No';  
}
于 2013-01-07T08:19:18.200 回答
1

这应该工作:

foreach( $val as $v ) 
{
    if( strpos( $v , $key .'_' ) === true ) 
    {
        echo 'yes';
    }
    else {
        echo 'no';
    }
}
于 2013-01-07T07:44:37.793 回答
0

给定的格式非常不切实际。

$array2 = array_reduce ($array, function (array $result, $item) {
     list($key, $value) = explode('_', $item);
     $result[$key] = $value;
     return $result;
}, array());

现在您可以使用isset($array2[$myKey]);. 我假设您稍后会在执行过程中发现这种格式也很有用。

于 2013-01-07T08:13:37.940 回答
0

你可以用这个

    function arraySearch($find_me,$array){
$array2 =array();
foreach ($array as $value) {
    $val = explode('_',$value);
    $array2[] =$val[0]; 
}
$Key = array_search($find_me, $array2);
$Zero = in_array($find_me, $array2);
if($Key == NULL && !$Zero){
    return false;
}
return $Key;
}
于 2013-01-07T07:41:26.307 回答
0
$key = 2; //always a dynamic number
$val = array('3_33', '2_55'); //always a dynamic string with underscore
$inarray = false;
foreach($val as $v){
    $arr = explode("_", $val);
    $inarray = $inarray || $arr[0] == $key
}
echo $inarray?"Yes":"No";
于 2013-01-07T07:39:39.080 回答