2016-06-16 43 views
0

我有URL JSON阵列www.example.com/json.php搜索JSON字符串数组与PHP关键字

[ {"name": "Afghanistan", "code": "AF"}, {"name":"ÅlandIslands","code": "AX"}, {"name": "Albania", "code": "AL"}, {"name": "Algeria", "code": "DZ"}, {"name": "American Samoa", "code": "AS"}, {"name": "AndorrA", "code": "AD"}, {"name": "Angola", "code": "AO"}, {"name": "Anguilla", "code": "AI"}, {"name": "Antarctica", "code": "AQ"}, {"name": "Antigua and Barbuda", "code": "AG"}, {"name": "Argentina", "code": "AR"}, {"name": "Armenia", "code": "AM"}, {"name": "Aruba", "code": "AW"}, {"name": "Australia", "code": "AU"}, {"name": "Austria", "code": "AT"}, {"name": "Azerbaijan", "code": "AZ"}, {"name": "Bahamas", "code": "BS"}, {"name": "Bahrain", "code": "BH"}, {"name": "Bangladesh", "code": "BD"}, {"name": "Barbados", "code": "BB"}, {"name": "Belarus", "code": "BY"}, {"name": "Belgium", "code": "BE"}, {"name": "Belize", "code": "BZ"}, {"name": "Benin", "code": "BJ"}, {"name": "Bermuda", "code": "BM"}, {"name": "Bhutan", "code": "BT"}, {"name": "Bolivia", "code": "BO"}, {"name": "Bosnia and Herzegovina", "code": "BA"}, {"name": "Botswana", "code": "BW"}, {"name": "Bouvet Island", "code": "BV"}, {"name": "Brazil", "code": "BR"}, {"name": "British Indian Ocean Territory", "code": "IO"}, {"name": "Brunei Darussalam", "code": "BN"}, {"name": "Bulgaria", "code": "BG"}, {"name": "Burkina Faso", "code": "BF"}, {"name": "Burundi", "code": "BI"}, {"name": "Cambodia", "code": "KH"}, {"name": "Cameroon", "code": "CM"}, {"name": "Canada", "code": "CA"}, {"name": "Cape Verde", "code": "CV"}, {"name": "Cayman Islands", "code": "KY"}, {"name": "Central African Republic", "code": "CF"}, {"name": "Chad", "code": "TD"}, {"name": "Chile", "code": "CL"},{"name": "China", "code": "CN"}, {"name": "Christmas Island", "code": "CX"}, {"name": "Cocos (Keeling) Islands", "code": "CC"}, {"name": "Colombia", "code": "CO"}, {"name": "Comoros", "code": "KM"}, {"name": "Congo", "code": "CG"}, {"name": "Congo, The Democratic Republic of the", "code": "CD"}, {"name": "Cook Islands", "code": "CK"}, {"name": "Costa Rica", "code": "CR"}, {"name": "Cote D\"Ivoire", "code": "CI"}, {"name": "Croatia", "code": "HR"}, {"name": "Cuba", "code": "CU"}, {"name": "Cyprus", "code": "CY"}, {"name": "Czech Republic", "code": "CZ"},{"name": "Denmark", "code": "DK"}, {"name": "Djibouti", "code": "DJ"}, {"name": "Dominica", "code": "DM"}, {"name": "Dominican Republic", "code": "DO"}, {"name": "Ecuador", "code": "EC"}, {"name": "Egypt", "code": "EG"}, {"name": "El Salvador", "code": "SV"}, {"name": "Equatorial Guinea", "code": "GQ"}, {"name": "Eritrea", "code": "ER"}, 

如何使用关键字查询筛选数据? 例子是这样的:

的所有数据:https://restcountries.eu/rest/v1/all

搜索关键词中:https://restcountries.eu/rest/v1/name/nesia

回答

-2

你必须读取URL转换为字符串。然后,你应该使用json_decode()PHP函数(如果这是你的意思是关键字)。

可以读取URL与curl命令:

$fp = fopen("curl_error.txt", "w"); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://osteohickson.com/a/misc/rest_copy/"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_STDERR, $fp); 
$result = curl_exec($ch); 

var_dump(json_decode($result)); 

curl_close($ch); 
fclose($fp); 

然而,网址: “https://restcountries.eu/rest/v1/all” 是当我尝试它禁止。这意味着您需要用户名和密码才能访问数据。由于我没有它,我在另一台服务器上制作了一个字符串的副本用于测试目的。

现在您可以“获取”数据,您想要检查如何处理它。

+0

可以显示的示例代码? – rif

0

首先解码的JSON字符串:

$property = 'name'; 
$keyword = 'nesia'; 

$result = array_filter($countries, function($country) use ($property, $keyword) { 
    return strpos($country->$property, $keyword) !== false; 
}); 

回调使用strpos将检查每个项目的名称的关键词:

$countries = json_decode($json); 

然后你使用array_filter所产生的阵列可以过滤。请务必使用严格比较(!==而不是!=),这样名称(索引0)开头的匹配不会被排除。

+0

我得到空白数组[] – rif

+0

如果你用这个确切的代码使用你的问题中显示的示例数组,那是因为该数组中没有名称包含“nesia”。 –

0

下面的代码将通过名称筛选JSON数据:

$term = 'nesia'; 

$data = json_decode($json); 
$filtered = array_filter($data, function($item) use ($term) { 
    return stripos($item->name, $term) !== false; 
}); 

print_r($filtered); 
+0

您必须在回调中使用($ term)',否则将在该范围内未定义。 –

+0

哎呀,谢谢!我纠正了代码片段。 –