需要以特定方式对PHP数组进行json_encode

时间:2014-11-19 13:24:14

标签: arrays json multidimensional-array jquery-ui-autocomplete

好的,我所拥有的是一个如下所示的PHP数组:

Array
(
    [0] => Array
        (
            [label] => 1
            [value] => Value example
        )
    [1] => Array
        (
            [label] => 10
            [value] => Value example 2
        )
    [...]
)

现在,如果我json_encode()这个数组,我得到的是:

[
    Object { label="1", value="Value example" },
    Object { label="10", value="Value example 2" },
    ...
]

但要在jQuery Autocomplete中使用它,我需要数组如下:

[
    { label="1", value="Value example" },
    { label="10", value="Value example 2" },
    ...
]

我在没有找到解决方案的情况下阅读了大量的页面......有人可以帮忙吗?

更新彼​​得:

这是我的代码:

$results = array();
foreach ($temp as $tmp) {
    $results[] = array(
        'label' => $tmp['id'],
        'value' => $tmp['it']
    );
};
echo json_encode($results);

如果它有用,则从以下Wordpress函数生成$temp数组:

$wpdb->get_results($query, ARRAY_A);

更新彼​​得2

SCRIPT:

jQuery(document).ready(function($){
    var temp_array = function(request, response) {
        $.ajax({
            url: '<?php echo admin_url('admin-ajax.php'); ?>',
            type: 'POST',
            dataType: 'json',
            data: {
                'action': 'autocomplete_finder',
                'data' : request.term,
            },
            success: function(data) {
                //response(data);
                console.log(data);
            }
        });
    };
    $('#containing').autocomplete({
        source: temp_array,
        minLength: 3,
        select: function(event, ui) {
            console.log('test')
        }
    });
});

HTML:

<input id="containing" style="width: 98%">

1 个答案:

答案 0 :(得分:1)

我刚刚意识到你做了什么简单的错误

使用label切换value

$results = array();
foreach ($temp as $tmp) {
    $results[] = array(
        'label' => $tmp['it'],
        'value' => $tmp['id']
    );
};
echo json_encode($results);

它会起作用

你的数组应如下所示:

Array
(
    [0] => Array
        (
            [label] => Value example
            [value] => 1
        )
    [1] => Array
        (
            [label] => Value example 2
            [value] => 10
        )
    [...]
)