php使用通配符匹配变量名称

时间:2017-12-14 18:12:54

标签: php variables wildcard

我需要检查是否存在变量。

变量不一定按1.2.3的顺序创建。他们可以创建2.4.3.1。这些也不是在同一页面上同时创建的。所以我只是想检查变量是否存在。

$_SESSION['rule1']
$_SESSION['rule2']
$_SESSION['rule3']
$_SESSION['rule4']

<?
 if(isset($_SESSION['rule'.*wildcard*'])) {

 do something

 }
?>

我不确定该怎么做。答案可能在于REGEX,但我对REGEX很恐怖。

2 个答案:

答案 0 :(得分:0)

如果您不知道需要知道会话数组中的哪个规则*键,只有当它们中的任何一个存在时,您才可以尝试:

<?php

function prefixExists(array $assoc_array, $prefix)
{
    $length = strlen($prefix);
    foreach ($assoc_array as $key => $unused)
    {
        if (strncmp($key, $prefix, $length) === 0) {
            return true;
        }
    }
    return false;
}

测试如下:

session_start();
var_dump(prefixExists($_SESSION, 'rule'));
$_SESSION['rule3'] = 'some value from form';
var_dump(prefixExists($_SESSION, 'rule'));

提供输出:

bool(false)
bool(true)

答案 1 :(得分:0)

以下是使用preg_match

的另一种解决方案
function arrayHasSimilarKey(array $array, $matchKey)
{
    $pattern = '/' . str_replace('*', '.*', $matchKey) . '/i';
    foreach ($array as $key => $value) { echo $key.PHP_EOL;
        if (preg_match($pattern, $key)) {
            return true;
        }
    }

    return false;
}

$testArray = ['abc' => 1, 'test_1' => 1, 'test_2' => 1, 'test2_1' => 1, 'test3_2' => 1];
$tests = [
    0 => arrayHasSimilarKey($testArray, 'test*'),    // true
    1 => arrayHasSimilarKey($testArray, 'test2*_2'), // false
    2 => arrayHasSimilarKey($testArray, 'test3*'),   // true
    3 => arrayHasSimilarKey($testArray, 'test3*_1'), // false
    4 => arrayHasSimilarKey($testArray, '*_2')       // false
];

var_dump($tests);

在您的情况下,$testArray将为$_SESSION