Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组中的值是字符串而不是整数_Php_Arrays_Json - Fatal编程技术网

Php 数组中的值是字符串而不是整数

Php 数组中的值是字符串而不是整数,php,arrays,json,Php,Arrays,Json,我有一个多维数组,我需要传递给谷歌图表。该脚本通过Ajax调用,运行三次,然后传回使用json\u encode编码的数组。然后我需要向数组添加头,因此我使用了array\u unshift() 这是剧本 $dataArray = array(); $i = 0; foreach ($arrSiteValue as $key => $value) { if($i == 3){ break; }

我有一个多维数组,我需要传递给谷歌图表。该脚本通过Ajax调用,运行三次,然后传回使用
json\u encode
编码的数组。然后我需要向数组添加头,因此我使用了
array\u unshift()

这是剧本

    $dataArray = array();

    $i = 0;
    foreach ($arrSiteValue as $key => $value) {
        if($i == 3){
            break;
        }
        $dataArray[$key] = $value;
        $i ++;
    }

    array_unshift($dataArray, array("Terms","Visits"));

    echo json_encode($php_array);
以下是返回的内容:

注意:如果显示(未设置)和(未提供),则它们是字符串的正确值,并且必须是正确值

键的值应为整数,但它将作为字符串传回

如何获取该值以便将该值作为整数相加?

下面是一个虚拟数组(可以使用),它显示了数组的输出格式,如下所示:

    $php_array = array(
        array('Terms', 'Visits'),
        array('test', 90),
        array('joke', 90),
        array('funny', 11)
    );
这就是这个虚拟数组输出的内容(这就是我需要它的方式):

*当我将该行更改为include(int)时,这里的一些用户重新开始,我得到以下结果:

编辑

以下是从Google Analytics Library获取数据的行:

if (!$_GET["rangeStartDate"]) {
        $startDate = date("Y-m-d", mktime(0, 0, 0, date("m")-1, date("d")-1, date("Y")));
        $endDate = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-1, date("Y")));
    } else {
        $startDate = $_GET["rangeStartDate"];
        $endDate = $_GET["rangeEndDate"];
    }



    $metrics = "ga:visits";
    $dimensions = "ga:keyword";
    $filters = "ga:keyword==(not set)";
    $optParams = array('dimensions' => $dimensions, 'filters' => $filters);
    $arrSiteResults = $service->data_ga->get($ids,$startDate,$endDate,$metrics,$optParams);
    $notSetVisits = $arrSiteResults['rows'][0][1];

    // Visits and Page Views
    $metrics = "ga:visits";
    $dimensions = "ga:keyword";
    $optParams = array('dimensions' => $dimensions, 'sort' => '-ga:visits', 'max-results' => '12');
    $arrSiteResults = $service->data_ga->get($ids,$startDate,$endDate,$metrics,$optParams);
    $arrSiteValue = $arrSiteResults['rows'];
以下是$arrSiteValue的var_转储:

array(12) { [0]=> array(2) { [0]=> string(9) "(not set)" [1]=> string(4) "2582" } [1]=> array(2) { [0]=> string(14) "(not provided)" [1]=> string(4) "1504" } [2]=> array(2) { [0]=> string(10) "compass fm" [1]=> string(3) "149" } [3]=> array(2) { [0]=> string(18) "compass fm grimsby" [1]=> string(2) "25" } [4]=> array(2) { [0]=> string(9) "compassfm" [1]=> string(2) "10" } [5]=> array(2) { [0]=> string(15) "compassfm.co.uk" [1]=> string(1) "9" } [6]=> array(2) { [0]=> string(16) "compass fm radio" [1]=> string(1) "8" } [7]=> array(2) { [0]=> string(18) "grimsby rugby club" [1]=> string(1) "8" } [8]=> array(2) { [0]=> string(13) "compass radio" [1]=> string(1) "7" } [9]=> array(2) { [0]=> string(21) "compass radio grimsby" [1]=> string(1) "5" } [10]=> array(2) { [0]=> string(19) "www.compassfm.co.uk" [1]=> string(1) "5" } [11]=> array(2) { [0]=> string(15) "compass fm news" [1]=> string(1) "4" }}
使用(假设它们都是整数,否则使用)


尝试将工作分配行更改为:

$dataArray[$key] = is_numeric($value) ? (int)$value : $value;

注意:这不是一个通用的解决方案,但在这种特殊情况下可以工作。

PHP的
json\u encode
函数将始终将PHP字符串编码为json字符串。如果数据以字符串形式进入JSON,那么在PHP中也是字符串

为什么它是PHP中的字符串是一个有趣的问题。也许数据来自数据库

在任何情况下,解决方案都是在将字符串传递到
json\u encode
时将其转换为整数(带):

$dataArray[$key] = (int) $value;
注意,我不会用
检查的是数值
。API显然希望值是整数,所以我建议您提供一个。如果无法转换该值,则该值将为
0
,在您的情况下,这可能是一个合理的默认值


好的,上面的代码是错误的,因为它试图将数组转换为整数。那么,问题是如何构造该数组。如果无法显示创建无效值的代码行,则很难帮助您解决此问题

但我敢打赌5英镑,解决方案是
(int)


根据最新更新。我没有意识到这些数据来自谷歌分析。您得到的数据如下所示:
[1]=>string(4)“2582”
。这显然是一个包含数字字符的字符串。您需要使用
(int)
将其转换为数字。您应该在循环中执行此操作:

if($i == 3){
    break;
}
$value[1] = (int) $value[1]; // cast the number to an int
$dataArray[$key] = $value;

假设您无法在数据源处更改数据(您说它来自外部API),您可能需要自己将字符串显式转换为整数:

$dataArray[$key] = intval($value, 10);


在转换$value之前,您可能需要检查$value是否确实是一个有效的数字-请使用
is_numeric
,因为它可能是重复的:@jahandehar问题中的OP似乎没有解决他的问题,所以很难说它是否是重复的。
$dataArray[$key] = intval($value, 10);
$dataArray[$key] = (int)$value;