[英]converting from XML -> PHP Array -> Json Encode
我正在使用jquery tokeninput插件和XML數據設置輸入自動完成功能。
我有一個XML文件,其結構如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<majors>
<major program="GCIS">Computing & Info Sci (PHD)</major>
<major program="UINT">Business Administration (AAS)</major>
etc..
</majors>
我將其加載到PHP中:
$majors = simplexml_load_file('../ajax/majors.xml');
然后,我想做以下事情:
將每個<major>
元素重新格式化為字符串,包括program
屬性
<major program="GCIS">Computing & Info Sci (PHD)</major>
變成字符串GCIS - Computing & Info Sci (PHD)
strpos($convertedString, $userQuery)
,如果存在用戶查詢,則返回true / false $userQuery
元素全部用json_encode($arr)
編碼 這是我目前擁有的代碼...我似乎無法使格式化/過濾正常工作。
if(isset($_POST['query']) ) {
$majors = simplexml_load_file('../ajax/majors.xml');
# iterate through.
foreach ($majors as $key => $value) {
$arr = array('major' => $value['program'] . " - " . $value);
}
# filter the response using our query
$arr = array_filter($arr, 'filterArrayWithQuery');
# JSON-encode the response
$json_response = json_encode($arr);
# Return the response
return $json_response;
}
# ensures that the search query is present
function filterArrayWithQuery( $string ) {
return !strpos( $string, $query ) === false;
}
最終結果JSON輸出應如下所示:
{"major":"GCIS - Computing & 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 & Info Sci (PHD)</major>
<major program="UINT">Business Administration (AAS)</major>
</majors>
XML;
$_POST['query'] = 'Info';
echo convert($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);
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.