【问题标题】:Passing numerically indexed PHP array to javascript将数字索引的PHP数组传递给javascript
【发布时间】:2010-08-27 11:51:42
【问题描述】:

我有一个这种格式的 PHP 数组:

        $js_data_array[] = array('href' =>$matches[1][0], //this is an image url
                                'title' =>'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
                                 );

我需要用javascript把它变成这种格式

 [{
'href' : 'http://farm5.static.flickr.com/4005/4213562882_851e92f326.jpg',
'title' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'
},{
'href' : 'http://farm5.static.flickr.com/4005/4213562882_851e92f326.jpg',
'title' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'
}]

我在 wordpress 中使用 wp_localise_script() 来传递似乎不接受 json 编码数组的数据。

如果我按原样传递数组,我会得到一个带有重复值“数组”的数字索引数组

所以,问题是,我怎样才能将数据作为数组传递但没有数字索引?我不能在 php 数组 AFAIK 中有重复的键。

【问题讨论】:

    标签: php javascript arrays


    【解决方案1】:

    json_encode()

    例如

    $matches = array(1=>array(0=>'foo'));
    $js_data_array = array();
    
    $js_data_array[] = array(
    'href' =>$matches[1][0], //this is an image url
      'title' =>'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
    );
    $js_data_array[] = array(
     'href' =>$matches[1][0], //this is an image url
      'title' =>'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
    );
    
    echo $json = json_encode($js_data_array);
    

    打印

    [{"href":"foo","title":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"},{"href":"foo","title":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"}]
    

    【讨论】:

    • 是的,谢谢,但我已经尝试过了,无法将它与 wp_localise_script() 一起使用
    • 当我将 JSON 输出记录到 firebug 控制台时,我得到一个字符串而不是一个对象,例如:“[{"href":"/files/2010/06/Bioreactor-4. jpg","title":"Lorem ipsum dolor sit amet, consectetur adipiscing elit"},..... 是因为“?
    • 从我在这里读到的内容:weblogtoolscollection.com/archives/2010/05/07/… 无论如何,这不是你使用这个 wp_localise_script() 的方式。
    【解决方案2】:

    你应该在解码你的json数据时使用wp函数wp_specialchars_decode()

    wp_specialchars_decode($json, ENT_QUOTES)
    

    $json 是您的编码数组。

    【讨论】:

      【解决方案3】:

      似乎 wp_localize_script() 对引号进行了编码。因此,我在 JS 中替换了 ":

      gallery_data = image.data.replace(/"/g,'"');
      

      【讨论】:

        猜你喜欢
        • 2014-06-11
        • 1970-01-01
        • 2011-05-16
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        相关资源
        最近更新 更多