我可以定义"" (没什么)因为" 0"在整个PHP脚本中?

时间:2014-11-05 22:41:30

标签: php

在我的脚本中,我目前使用100多行代码定义为“0”

if ($var == "") {
    $var = 0;
}

在PHP中有没有办法可以自动定义是否有什么东西将它的值设置为0? 我试过了

define('', '0');

但这没效果

背景:

这些“空”值正在从许多不同类型的API导入,如果用户分析不存在,则值将设置为“”。在图表/图表/表格中显示时会导致错误和中断。

没有将每个变量设置为“”(“如何导入”) - 我需要一种更快捷,更有效的方法。

以下是API调用之一:

// January
    $janViews = file_get_contents('https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date='.$jan.'&end-date='.$feb.'&&metrics=views%2Clikes%2CsubscribersGained%2Ccomments&access_token='.$_SESSION['authcode']);
    $jsonJan = json_decode($janViews);
    $monthlyViewsJan = $jsonJan->rows[0][0];
    $monthlyLikesJan = $jsonJan->rows[0][1];
    $monthlySubsJan = $jsonJan->rows[0][2];
    $monthlyCommentsJan = $jsonJan->rows[0][3];

上述代码被要求12次(每月)。这是每个月的验证。

if ($monthlyViewsJan == "") {
    $monthlyViewsJan = 0;
}
if ($monthlySubsJan == "") {
    $monthlySubsJan = 0;
}
if ($monthlyCommentsJan == "") {
    $monthlyCommentsJan = 0;
}
if ($monthlyLikesJan == "") {
    $monthlyLikesJan = 0;
}

2 个答案:

答案 0 :(得分:1)

更新:

这应该适合你:

它抓住你skript中的所有变量!并且如果它们是空的则检查它们,如果是的话,它用0

来确定它们
<?php

    $test1 = "";
    $test2 = "";
    $test3 = "";
    $test4 = "test";

    $arr1 = get_defined_vars();

    foreach ($arr1 as $k => $v) {

        if(!is_array($arr1[$k]) && $$k == "")
            $$k = 0;
    }

    echo $test1 . "<br />";
    echo $test2 . "<br />";
    echo $test3 . "<br />";
    echo $test4 . "<br />";


?>

输出:

0
0
0
test

此外,如果您使用define();定义constant而不是variable

答案 1 :(得分:0)

没有办法避免实际更改值。您对速度的担忧是没有根据的,但我怀疑您真正关心的是您必须编写的额外代码量。在这种情况下,我会提出几种方法。

如果您不想要任何空字符串,您可以使用array_walk_recursive一次性解析返回的数据:

$jsonJan = json_decode(file_get_contents('https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date='.$jan.'&end-date='.$feb.'&&metrics=views%2Clikes%2CsubscribersGained%2Ccomments&access_token='.$_SESSION['authcode']));

array_walk_recursive($jsonJan, function(&item, $key){
    $item = empty($item) ? 0 : $item;
});

$monthlyViewsJan = $jsonJan->rows[0][0]; //will be value or 0

如果你不能这样做,而是将所有变量存储到数组中:

$data=[]
$jsonJan = json_decode(file_get_contents('https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date='.$jan.'&end-date='.$feb.'&&metrics=views%2Clikes%2CsubscribersGained%2Ccomments&access_token='.$_SESSION['authcode']));
$data=['monthlyViewsJan'] = $jsonJan->rows[0][0];
$data=['monthlyLikesJan'] = $jsonJan->rows[0][1];
$data=['monthlySubsJan'] = $jsonJan->rows[0][2];
$data=['monthlyCommentsJan'] = $jsonJan->rows[0][3];
//all your other api calls, storing into data

//change empty strings for 0
foreach($data as &$item)
    $item = empty($item) ? 0 : $item;
//extract data array back into individual variables
extract($data);
//test
echo $monthlyViewsJan; //outputs value or 0