about 4 years ago

google chart

因為 google chart 要的 JSON 格式跟 PHP framework 吐出來的資料格式不同,沒辦法直接
CJSON::encode($objs) ...

index.php
<?php
    // google chart 要的格式
 $jsonDatas = array('role'=>array(array('a',1),array('b',2),array('c',3)));
  
    // Yii 或其他 framework 吐出來的格式
 $jsonDatas = array('role'=>array('a'=>1,'b'=>2),array('c'=>3,'d'=>4));

但 PHP 好像沒提供類似平行化的功能,只好寫一下重組。

SomeGlobalFunction.php
<?php
$a = array('role'=>array('a'=>1,'b'=>2, 'c'=>3,'d'=>4, 'e'=>5,'f'=>6));
$b = array('a'=>1,'b'=>2,'c'=>array('d'=>3,'e'=>4));
$c = array('a'=>1,'b'=>2);

function arrayFlatten($array=array())
{
    static $temp = array();
    foreach($array as $key => $value)
    {
        if (is_array($value))
            return arrayFlatten($value);
        array_push($temp, array($key, $value));
    }
    // static $temp 在回傳最後結果要清空,否則下次使用結果會持續累加
 $result = $temp;
    $temp = array();
    return $result;
}

echo CJSON::encode(arrayFlatten($a));
echo CJSON::encode(arrayFlatten($b));
echo CJSON::encode(arrayFlatten($c));

結果

[["a",1],["b",2],["c",3],["d",4],["e",5],["f",6]]
[["a",1],["b",2],["d",3],["e",4]]
[["a",1],["b",2]]

← Yii 簡易模擬 enum 加上 toString 的用法 Did you KNOW !? →