我有一个多维数组,我需要传递给Google Charts。该脚本通过Ajax调用,运行三次,然后传回用json_encode
编码的数组。然后我需要向数组添加标题,因此我使用了array_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'];
这是var_dump:$ arrSiteValue:
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" }}
答案 0 :(得分:4)
PHP的json_encode
函数将始终将PHP字符串编码为JSON字符串。如果数据作为字符串进入JSON,那么它也是PHP中的字符串。
为什么它是PHP中的字符串是一个有趣的问题。也许数据来自数据库?
在任何情况下,解决方案是将字符串转换为整数((int)
),然后将其传递给json_encode
:
$dataArray[$key] = (int) $value;
请注意,我不会检查is_numeric
。 API显然期望值是一个整数,所以我建议你提供一个。如果无法转换该值,则该值为0
,这可能是您案例中合理的默认值。
好的,上面的代码是错误的,因为它试图将数组转换为整数。那么问题是如何构造该数组。如果您无法显示创建不起作用的值的代码行,则很难帮助您解决此问题。
但我敢打赌5英镑,解决方案是(int)
。
根据最新更新。我还没有意识到数据来自 Google Analytics 。您获得了数据,它看起来像这样:[1]=> string(4) "2582"
。这显然是一个包含数字字符的字符串。您需要使用(int)
将其转换为数字。你应该在你的循环中这样做:
if($i == 3){
break;
}
$value[1] = (int) $value[1]; // cast the number to an int
$dataArray[$key] = $value;
答案 1 :(得分:2)
尝试将分配线更改为:
$dataArray[$key] = is_numeric($value) ? (int)$value : $value;
注意:它不是通用的解决方案,但可以在这种特殊情况下使用。
答案 2 :(得分:0)
使用intval()(假设它们都是整数,否则使用floatval())。
$dataArray = array();
$i = 0;
foreach ($arrSiteValue as $key => $value) {
if($i == 3){
break;
}
$dataArray[$key] = intval($value);
$i ++;
}
array_unshift($dataArray, array("Terms","Visits"));
echo json_encode($php_array);
答案 3 :(得分:0)
假设您无法在源头更改数据(您说它来自外部API),您可能必须自己将字符串显式转换为整数:
$dataArray[$key] = intval($value, 10);
或
$dataArray[$key] = (int)$value;
在转换之前,您可能需要检查$ value实际上是否为有效数字 - 请使用is_numeric