复杂PHP数组中的搜索值
我已经读过很多关于从复杂数组中寻找值的文章,但所有这些都只能达到第二级。有人能给我提供递归查找地址行2中的值(例如state)的代码吗 我有下面的JSON复杂PHP数组中的搜索值,php,arrays,json,search,Php,Arrays,Json,Search,我已经读过很多关于从复杂数组中寻找值的文章,但所有这些都只能达到第二级。有人能给我提供递归查找地址行2中的值(例如state)的代码吗 我有下面的JSON { "company": { "id": "123456", "name": "Test Company LLC.", "FEIN": "22-2222222", "address": { "address_line_1": { "street": "1 Street St, S
{
"company": {
"id": "123456",
"name": "Test Company LLC.",
"FEIN": "22-2222222",
"address": {
"address_line_1": {
"street": "1 Street St, Suite 12",
"city": "San Francisco",
"postalCode": "123456"
},
"address_line_2": {
"state": "CA",
"country": "USA"
}
},
"phone": "1-800-XXX-XXXX",
"fax": "1-800-XXX-XXXX",
"email": "admin@abc.com",
"URL": "www.abc.com"
},
"producer": {
"id": "LLXXXX",
"name": "Test Name",
"phone": "555-555-5555",
"mobile": "555-555-5555",
"fax": "555-555-5555",
"email": "test@abc.com",
"producerSubCode": "111",
"NIPRId": "123456",
"stateProducerId": "12344"
}
}
~Harshit您可以使用它来获取给定密钥的值
$array=json_decode($json,true)
$names=array_列($array,'name') 而不是将其设置为数组。用正则表达式将其解析为字符串怎么样
$find = "San Francisco";
$re = '/(' . $find . ')\":\s\"(.*?)\"|\"(\w+)\":\s\"(' . $find . ')/m';
$str = '{ "company": { "id": "123456", "name": "Test Company LLC.", "FEIN": "22-2222222", "address": { "address_line_1": { "street": "1 Street St, Suite 12", "city": "San Francisco", "postalCode": "123456" }, "address_line_2": { "state": "CA", "country": "USA" } }, "phone": "1-800-XXX-XXXX", "fax": "1-800-XXX-XXXX", "email": "admin@abc.com", "URL": "www.abc.com" }, "producer": { "id": "LLXXXX", "name": "Test Name", "phone": "555-555-5555", "mobile": "555-555-5555", "fax": "555-555-5555", "email": "test@abc.com", "producerSubCode": "111", "NIPRId": "123456", "stateProducerId": "12344" } }';
preg_match_all($re, $str, $matches);
$result["key-match"] = array_slice(array_column($matches, 0),1,2);
$result["value-match"] = array_slice(array_column($matches, 0),3,2);
var_dump($result);
$find
可以是键或值。如果是键匹配或值匹配,结果数组将包含两个子数组 假设 数组中的每个键和值都是唯一的 功能定义 函数
getData()
在数组中搜索给定的字符串
- 如果字符串恰好是一个
,它将返回一个布尔值键
true
- 如果字符串恰好是数组中的
,它将返回一个值
键
- 如果字符串既不是
也不是键
,它将返回布尔值值
false
键
,而不是值
,我按原样返回?我想您应该同时输出键和值。但我不确定。有没有可能的复制品,我们可以得到我们要去的vlue的绝对地址。i、 e.在“城市”处,输出为“公司=>地址=>地址\线路\ 1=>城市”?是的,有。您希望“company=>address=>address\u line\u 1=>city”
成为字符串还是任何其他形式的字符串?成为一个字符串OnlyTanks@vivek\u 23,这很有帮助。你让我开心。
<?php
$json_string = '{"company":{"id":"123456","name":"Test Company LLC.","FEIN":"22-2222222","address":{"address_line_1":{"street":"1 Street St, Suite 12","city":"San Francisco","postalCode":"123456"},"address_line_2":{"state":"CA","country":"USA"}},"phone":"1-800-XXX-XXXX","fax":"1-800-XXX-XXXX","email":"admin@abc.com","URL":"www.abc.com"},"producer":{"id":"LLXXXX","name":"Test Name","phone":"555-555-5555","mobile":"555-555-5555","fax":"555-555-5555","email":"test@abc.com","producerSubCode":"111","NIPRId":"123456","stateProducerId":"12344"}}';
$json_array = json_decode($json_string,true);
function getData($json_array,$search_value){
foreach($json_array as $each_key => $each_value){
if($each_key === $search_value) return true;
if(is_array($each_value)){
$return_value = getData($each_value,$search_value);
if($return_value !== false) return $return_value === true ? $return_value : $each_key."=>".$return_value;
}else if($each_value === $search_value){
return $each_key;
}
}
return false;
}
echo "<pre>";
var_dump(getData($json_array,'San Francisco'));
var_dump(getData($json_array,'producerSubCode'));
var_dump(getData($json_array,'abc123'));
string(38) "company=>address=>address_line_1=>city"
bool(true)
bool(false)