2011-08-22 25 views
0

我的PHP代码看起来像这样。多个if - else在php中

if(isset($_GET['id'])) { 
    $id = $_GET['id']; 
} 
if(isset($_GET['subid'])) { 
    $subid = $_GET['subid']; 
} 

我想变量,如果isset如果!isset设置为0。类似的东西

if(isset($_GET['id'])) { 
    $id = $_GET['id']; 
} else $id='0'; 

但正如你看到我有多个如果的。我该怎么做?我需要为其他人写每个if?

UPDATE 好的。 thx为你的帮助。我做的。但是有什么办法可以再次缩短这段代码吗?

$id = isset($_GET['id']) ? $_GET['id'] : 0; 
$page = isset($_GET['page']) ? $_GET['page'] : 0; 
$subid = isset($_GET['subid']) ? $_GET['subid'] : 0; 
$feat = isset($_GET['feat']) ? $_GET['feat'] : 0; 

回答

4
$id = isset($_GET['id']) ? $_GET['id'] : 0; 
+0

我更新了我的问题。请看看 –

+0

@Tural,然后我建议查看Arjan已经提供的foreach解决方案。 – Pehmolelu

3
$id = $subid=0; 

if(isset($_GET['id'])) 
{ 
$id = $_GET['id']; 
} 
if(isset($_GET['subid'])) 
{ 
$subid = $_GET['subid']; 
} 

你可以在0开始所有的变量,你运行该代码

+0

如果你想这样做,不妨做:'$ id = $ subid = 0' – Prisoner

+0

是啊你是对的 – JSantos

+0

我更新了我的问题。请大家看看 –

2

使用一个辅助函数之前:

function getQSValueOrDefault($name, $default){ 
    if (!isset($_GET[$name])) 
     return $default; 
    else 
     return $_GET[$name]; 
} 

,并用它喜欢:

$id = getQSValueOrDefault('id', 0); 
$subid = getQSValueOrDefault('subid', 0); 
+0

如果可能的话请编辑我的代码 –

+0

这个可以用?:syntax –

+0

稍微简化一下我更新了我的问题。请看看 –

1

获取输入变量i的最短途径S中的以下内容:

$id = filter_input(INPUT_GET, 'id'); 

(你没有检查该值设置)

其他方法:

// set default values if they are not set 
// so that you don't have to check if they are set 
$inputs = $_GET + array(
    'id' => 0, 
    'subid' => 0, 
); 

$id = $inputs['id']; 
$subid = $inputs['subid']; 

或者使用三元运算符:

$id = isset($_GET['id']) ? $_GET['id'] : 0; 
$subid = isset($_GET['subid']) ? $_GET['subid'] : 0; 
+0

我更新了我的问题。请看看 –

+0

我提出的第一种和第二种方法都比你想缩短的代码短。 – arnaud576875

1
$id = isset($_GET['id']) ? $_GET['id'] : "0"; 
$subid = isset($_GET['subid']) ? $_GET['subid'] : "0"; 
+0

我更新了我的问题。请看看 –

+0

您已经标记为已回答的问题,它是。如果你真的需要它比现在更短(这将变得一团糟),那么你应该开一个新的问题。 – Prisoner

0

默认情况下,您可以将$id$subid声明为0。然后写一个简单的if (...) { }。就像这样:

$id = 0; 
$subid = 0; 

if (isset($_GET['id'])) 
    $id = $_GET['id']; 
if (isset($_GET['subid'])) 
    $subid = $_GET['subid']; 
1
foreach ($_GET as $key=>$value){ 
    if ($key === 'id' || $key === 'subid'){ 
    if(isset($value)) { 
     $$key = $value; 
    }else{ 
     $$key = '0'; 
    } 
    } 
} 
+0

这是引入不需要的变量的好方法,应该避免,因为这是潜在的安全风险。您可以通过检查'$ key'的值到预期变量列表来使其更安全。 – Arjan

+0

我不这么认为,我希望你再看一下;我现在完成了......顺便说一句:'提取'是严重得多... – Andreas

+0

是的,你在更新你的文章时,我正在输入我的评论。这似乎是安全的,但我可能会使用'in_array()'来检查'$ key'。 – Arjan

0

有关使用extract()如何?

extract($_GET); // it will create all the vairables 
// to set default values 
$id = isset($id) ? $id : 0; 
$subid = isset($subid) ? $subid : 0; 

编辑: 一个更优雅的方式

$id = $subid = 0; // set default values 
extract($_GET); // it will create all the variables and overwrite default values 
+0

您只需在代码中引入未经检查的用户输入。这是潜在的危险,应该避免。 'extract()'可以是有用的,但不是用户输入。 – Arjan

+0

我更新了我的问题。请看一下 –

0

您既可以使用:运营商删除多余的图片关键词,使之成为每个

$id= isset($_GET['id']) ? $_GET['id'] : 0; 
$subid=isset($_GET['subid']) ? $_GET['subid'] : 0; 
一行

你也可以创建一个函数为你完成工作。

function getOrDefault($name, $default) { 
    return isset($_GET[$name]) ? $_GET[$name] : $default); 
} 

这将允许您使用各种类型的默认值创建额外的包装函数。

function getInt($name) { 
    return getOrDefault($name,0); 
} 

function getString($name) { 
    return getOrDefault($name,""); 
} 

那么你的代码变得

$id = getInt('id'); 
$subid = get('subid'); 
1

如果你不想几行喜勿:

$id = isset($_GET['id']) ? $_GET['id'] : 0; 
$page = isset($_GET['page']) ? $_GET['page'] : 0; 
$subid = isset($_GET['subid']) ? $_GET['subid'] : 0; 
$feat = isset($_GET['feat']) ? $_GET['feat'] : 0; 

那么这可能是一个选择。

$keys = array('id', 'page', 'subid', 'feat'); 
foreach($keys as $key) 
{ 
    $$key = isset($_GET[$key]) ? $_GET[$key] : 0; 
} 

请注意,您没有为键设置不同的默认值或以不同的方式处理不同的键的选项。