从XML转换->;PHP数组->;Json编码

从XML转换->;PHP数组->;Json编码,php,jquery,xml,json,Php,Jquery,Xml,Json,我正在使用jquery tokeninput插件和XML数据设置输入自动完成 我有一个XML文件,其结构如下所示: <?xml version="1.0" encoding="UTF-8"?> <majors> <major program="GCIS">Computing &amp; Info Sci (PHD)</major> <major program="UINT">Busines

我正在使用jquery tokeninput插件和XML数据设置输入自动完成

我有一个XML文件,其结构如下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <majors>
        <major program="GCIS">Computing &amp; Info Sci (PHD)</major>
        <major program="UINT">Business Administration (AAS)</major>
        etc..
    </majors>
最终结果JSON输出应如下所示:

{"major":"GCIS - Computing &amp; Info Sci (PHD)","major":"UINT - Business Administration (AAS)"}

在迭代行中,您没有附加新条目-

# iterate through.
foreach ($majors as $key => $value) {
   $arr[] = array('major' => $value['program'] . " - " . $value);
//     ^^
}
有了这个,输出将是-

[{"major":"GCIS - Computing & Info Sci (PHD)"},{"major":"UINT - Business Administration (AAS)"}]
试试这个:

function convert($xml) {
    # ensures that the search query is present
    function filterArrayWithQuery($string) {
        static $query = null;
        if (is_null($query) && isset($_POST['query'])) $query = $_POST['query'];
        return !$query || strpos($string, $_POST['query']) !== false;
    }

    $majors = simplexml_load_string($xml);
    $arr = array();

    # iterate through
    foreach ($majors as $key => $value) {
        $arr[] = array('major' => $value['program'] . " - " . htmlentities($value));
    }

    # filter the response using our query
    $arr = array_filter($arr, 'filterArrayWithQuery');

    # Return the response (JSON-encoded)
    return json_encode(array('majors' => $arr));
}

$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
    <majors>
        <major program="GCIS">Computing &amp; Info Sci (PHD)</major>
        <major program="UINT">Business Administration (AAS)</major>
    </majors>
XML;

$_POST['query'] = 'Info';
echo convert($xml);
函数转换($xml){
#确保搜索查询存在
函数filterArrayWithQuery($string){
静态$query=null;
if(is_null($query)&&isset($_POST['query']))$query=$_POST['query'];
return!$query | | strpos($string,$\u POST['query'])!==false;
}
$majors=simplexml\u load\u字符串($xml);
$arr=array();
#反复浏览
foreach($key=>$value){
$arr[]=array('major'=>$value['program'].“-”.htmlentities($value));
}
#使用我们的查询过滤响应
$arr=array_filter($arr,'filterArrayWithQuery');
#返回响应(JSON编码)
返回json_encode(数组('majors'=>$arr));
}

$xml=感谢您提供的信息,不过我还是找到了解决方案

下面是供感兴趣的人使用的最后一个PHP脚本

<?php


# vars
$reqMethod    = $_SERVER['REQUEST_METHOD'];
$ref          = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : "http://www.google.com";                            
$allowedHosts = array('redacted', 'localhost'); 
$majors       = null;
$arr          = array();
$query        = isset($_POST['q']) ?  $_POST['q'] : "";

# confirm request is being sent from where we allow.
if ( $reqMethod != 'POST' || !in_array(parse_url($ref, PHP_URL_HOST), $allowedHosts) ) {

    header('Location: ' . $ref);

} else {

    # load in XML
    $majors = simplexml_load_file('../ajax/majors.xml');

    # iterate through XML. if element contains query, add it to an array.
    foreach ($majors as $key => $value) {
        if( !stristr( $value, $query ) === false ){
            $arr[] = array('major' => $value['program'] . " - " . $value);
        }
    }

    # Return the response - JSON encoded
    header('Content-type: application/json');
    echo json_encode($arr);

}

?>


JSON最终结果JSON输出是否正确?您的关联数组有两个名为“major”的键。@Yeah:最终结果JSON输出是我想要的输出。我想知道我需要做什么更改才能获得输出:)@前缀这不是有效的JSON。因此,您不能使用
json_encode()
生成此类输出。请查看此输出格式:
{“专业”:[“GCIS-Computing&Info Sci(PHD)”,“UINT-Business Administration(AAS)”]}
。这对你合适吗?谢谢--这是我最初的代码中的一部分问题,我监督了它。我对你的贡献投了赞成票。我还发现了另一个问题(我是“返回”JSON而不是回显它——显然你必须回显JSON数据?)
<?php


# vars
$reqMethod    = $_SERVER['REQUEST_METHOD'];
$ref          = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : "http://www.google.com";                            
$allowedHosts = array('redacted', 'localhost'); 
$majors       = null;
$arr          = array();
$query        = isset($_POST['q']) ?  $_POST['q'] : "";

# confirm request is being sent from where we allow.
if ( $reqMethod != 'POST' || !in_array(parse_url($ref, PHP_URL_HOST), $allowedHosts) ) {

    header('Location: ' . $ref);

} else {

    # load in XML
    $majors = simplexml_load_file('../ajax/majors.xml');

    # iterate through XML. if element contains query, add it to an array.
    foreach ($majors as $key => $value) {
        if( !stristr( $value, $query ) === false ){
            $arr[] = array('major' => $value['program'] . " - " . $value);
        }
    }

    # Return the response - JSON encoded
    header('Content-type: application/json');
    echo json_encode($arr);

}

?>