我可以定义“吗?”&引用;(无)作为;0“;在整个PHP脚本中?

我可以定义“吗?”&引用;(无)作为;0“;在整个PHP脚本中?,php,Php,在我的脚本中,我目前使用了100多行代码,没有将任何内容定义为“0” 即 在PHP中是否有一种方法可以自动定义如果什么都不是,将其值设置为0? 我试过了 define('', '0'); 但这不起作用 背景: 这些“空”值是从许多不同类型的API导入的,如果用户分析不存在,则将这些值设置为“”。在图形/图表/表格中显示时,会导致错误和中断 如果没有将每个变量从“”设置为“0”(如何导入),我需要一个更快、更高效的方法 以下是其中一个API调用: // January $janViews

在我的脚本中,我目前使用了100多行代码,没有将任何内容定义为“0”

在PHP中是否有一种方法可以自动定义如果什么都不是,将其值设置为0? 我试过了

define('', '0');
但这不起作用

背景:

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

如果没有将每个变量从“”设置为“0”(如何导入),我需要一个更快、更高效的方法

以下是其中一个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;
}
更新:

这应该适合您:

它抓住了你书信中的所有变量!并检查它们是否为空,如果是,则与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 />";


?>

如果使用
define()
您定义的是
常量
而不是
变量

没有办法避免实际更改值。您对速度的担心是没有根据的,但我怀疑您真正关心的是您将不得不编写的额外代码的数量。在这种情况下,我将推荐几种方法

如果您不希望任何空字符串,可以使用以下方法一次性解析返回的数据:

如果无法执行此操作,请将所有变量存储到数组中:

$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

我的头在转你为什么要这么做?如何将这些变量设置为空字符串?围绕api调用创建一个包装器,检查返回的变量并相应地进行设置。然后所有调用都通过这个包装器。如果没有看到实际的api调用代码,我将无法更详细地描述Steve所说的内容。只需循环响应对象/数组中的所有变量并进行验证,这并不能回答我的问题。我仍然需要写出100次,作为对不同变量的验证。我希望我的文档中存在的每个值为“”的变量都被赋予一个值“0”@typecon,或者只是在开始时用0而不是“”初始化变量!不,你不能说你的脚本中所有值为“”的变量都应该为0。你是在小便吗?我没有定义变量。它们是通过Google OAuth 2导入的空变量。0@Typeconor您可以将一个值关联到多个变量,如下所示:
varA=varB=varC=0如果这有帮助you@Typeconor这会如何影响加载时间?调整原语的值必须是在任何语言中都能做的最快的事情之一,可以在毫秒内完成10000000次
0
0
0
test
$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