一种生成dataLayer格式输出的优雅方式?

时间:2017-03-24 16:03:11

标签: php arrays data-layers

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

json_encode()

我编写了以下功能,但它并不优雅,也许很复杂。它是否存在类似的内容但是在PHP中构建?它类似于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 ); 函数,但存在一些差异:

function getPhoneLength() {
    var onlyNumbers = /^\d+$/.test($("#phone").val().replace(/[_-]/g, ''));
    if ($("#phone").val().replace(/[_-]/g, '').length == 10 && onlyNumbers) {
        return true;
    }
    return false;
}

1 个答案:

答案 0 :(得分:0)

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

json_encode([$array], JSON_PRETTY_PRINT)

我很难过,以前我还不知道,写下自己的剧本会让我头疼。