PHP 获取字符串并检查该字符串是否作为变量存在

标签 php variables dynamic-variables

我有一个有趣的情况。我正在使用包含在多个页面上的表单(为简单起见并减少重复),并且在某些区域此表单填充了来自数据库的值。但是,并非所有这些值都会始终存在。例如,我可以做一些效果:

<?php echo set_value('first_name', $first_name); ?>

这在值存在的情况下可以正常工作,但 $user 并不总是设置,因为他们可能是第一次输入他们的名字。是的,您可以在 if 语句(速记或常规)中执行 isset($first_name) && $first_name

我正在尝试编写一个辅助函数来检查变量是否已设置以及它是否不为空。理想情况下,我想做一些类似 varIsset('first_name') 的事情,其中​​ first_name 是一个实际的变量名称 $first_name 并且该函数将接收字符串,将其转换为预期的变量 $first_name 并检查如果已设置且不为空。如果它通过了要求,则返回该变量值(在本例中为“测试”)。如果它不符合要求,即未设置或为空,则该函数将返回“{blank}”。

如果有帮助,我正在使用 CodeIgniter,将在不久的将来切换到 Laravel。任何帮助表示赞赏。这是我到目前为止整理的内容,但无济于事。

function varIsset($var = '')
{   
    foreach (get_defined_vars() as $val) {
        if ($val == $var) {
            if (isset($val) && $val) {
                echo $val;
            }
            break;
        }
    }
    die;
}

这是一个用法示例:

<?php 
if (varIsset('user_id') == 100) {
    // do something
}
?>

最佳答案

我会使用数组并自己检查数组键(或初始化我所有的变量...),但对于您的函数,您可以使用类似的东西:

function varIsset($var)
{   
    global $$var;
    return isset($$var) && !empty($$var);
}

查看 variable variables 上的手册.您需要使用 global $$var; 来解决范围问题,因此这是一个有点讨厌的解决方案。查看工作 example here .

编辑:如果您需要返回的值,您可以这样做:

function valueVar($var)
{   
    global $$var;
    return (isset($$var) && !empty($$var)) ? $$var : NULL;
}

但老实说,在它们可能存在或可能不存在的情况下使用这样的变量对我来说似乎有点不对。

关于PHP 获取字符串并检查该字符串是否作为变量存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282389/

相关文章:

sql-server - 如何在数据流任务SSIS 2008 r2中传递变量

ruby - 在 Ruby 中使用一个变量的值作为另一个变量名

php - 多个长并发 MySQL 查询

javascript - 平滑扩展 Div 不滞后

php - 使侧边栏中的所有图像大小相同?

reactjs - 如何在 React 中创建动态变量名?

php - Wordpress:stylesheet.css 仅适用于主页

javascript - 用户输入文本框

java - 在 Java 中为变量分配动态名称

matlab - 在 Matlab 中动态分配变量