【问题标题】:An elegant way to generate dataLayer formatted output?一种生成 dataLayer 格式输出的优雅方式?
【发布时间】:2017-03-24 16:03:11
【问题描述】:

我需要从 php 数组中生成以下类型的输入:

dataLayer = [{
  key: 'value',
  key2: {
    key3: ['value2','value3','value4'],
    key4: ['value5','value6']
  }
}];

我编写了以下函数来完成它,但它并不优雅而且可能很复杂。它是否存在类似的东西但在 PHP 中构建?它类似于json_encode() 函数,但有一些区别:

function dataLayerEncode( $array ) {
    $encoded = "dataLayer[{\n";            
    $n = 1;            
    while (list($key, $val) = each($array)) {            
        if ( ! is_array( $val ) ) {
            $encoded .= "  $key: '$val'".($n < count($array) ? ',' : '')."\n";            
        } else {
            $encoded .= "  $key: {\n";
            $nn = 1;                    
            while (list($key, $value) = each($val)) {
                if ( ! is_array( $value ) ) {
                    $encoded .= "    $key: '$value'".($nn < count($value) ? ',' : '')."\n";
                } else {
                    $value = array_map( function ($el) { return "'{$el}'"; }, $value);
                    $value = implode( ',', $value );
                    $encoded .= "    $key: [$value] \n";
                }
                $nn++;
            }
            $encoded .= "  }\n";
        }
        $n++;
    }
    $encoded .= "}];\n";
    return $encoded;
}
$array = array( 'key' => 'value', 'key2' => array('key3' => array('value2','value3','value4'),'key4' => array('value5','value6') ) );
echo dataLayerEncode( $array );

【问题讨论】:

    标签: php arrays data-layers


    【解决方案1】:

    几个月后,我找到了一个可爱的单线解决方案:

    json_encode([$array], JSON_PRETTY_PRINT)
    

    我很遗憾我以前不知道它,它可以让我不用编写自己的脚本。

    【讨论】:

    • 如果你的问题包含了你想要完成的具体事情,我猜这与Google Tag Manager有关,那么你的运气可能会更好
    • @gview 你是对的。但我不知道 GTM 使用相同的输出,它是用于与客户端技术的小型自定义集成。
    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多