【发布时间】:2019-07-08 07:48:51
【问题描述】:
我在通过“foreach”创建一个函数来返回我想要的结果时遇到了一些问题。 我的 JSON 数据解码示例数组:
$json_string =
'{"010_INICHK": [
{
"Symbol1": "01",
"Symbol2": "",
"Desc": "000_Start"
},
{
"Symbol1": "",
"Symbol2": "0701",
"Desc": "010_Exchange"
},
{
"Symbol1": "87",
"Symbol2": "",
"Desc": "025_MEASURE}
],
"020_PROCESS1": [
{
"Symbol1": "69",
"Symbol2": "",
"Desc": "000_REDO CLN"
},
{
"Symbol1": "",
"Symbol2": "6341",
"Desc": "115_AFT CLN"
}
],
"030_PROCESS2": [
{
"Symbol1": "75",
"Symbol2": "",
"Desc": "010_MT Load"
},
{
"Symbol1": "",
"Symbol2": "6341",
"Desc": "020_AFT Load CLN"
}
]
}'
我的搜索逻辑:
1. use "lookup_main" to search 010_INICHK, 020_PROCESS1 or 030_PROCESS2, if found go to step 2. else return "UNDefine".
2. Then use "lookup_sub"(4 digits) to search "Symbol2" in 010_INICHK, 020_PROCESS1 or 030_PROCESS2 (depends on result in step 1.) if not find, use "lookup_sub"(first 2 digits) search "Symbol1".
3. If found, return array ['lookup_main', "Desc" value] else return "UNDefine"
例如,
我想使用 ['030_PROCESS2', '6341'] 查找并返回 ['030_PROCESS2', "020_AFT Load CLN"]。
我的代码是这样的:
function vlookup($lookup_main, $lookup_sub, $lookup_array, $lookup_column, $result_column){
if ($lookup_main == $look_array[0]){
foreach($lookup_array as $item_array){
foreach($item_array as $item){
if ($item[$lookup_column] == $lookup_sub) {
return $item[$result_column];
}elseif($item[$lookup_column] == substr($lookup_sub,0,2){
return $item[$result_column];
}else{
echo 'UNDefine'; //undefine step
}
}
}
}else{
echo 'UNDefine';
}
return false;
}
$data = json_decode($json_string, true);
$result = array($lookup_main, vlookup('030_UBM1', '6341', $data, 'Symbol2','Desc'));
echo '<pre>', print_r($result, true), '</pre>';
但是输出是 [null 115_AFT CLN]... 我究竟做错了什么?我该如何解决它并有一些方法可以更快地搜索? (PHP 7.0)
【问题讨论】:
-
好吧,首先,您之前是否在代码中定义了
$lookup_main?因为此刻你从未定义它。据我了解,您也想返回$lookup_main。所以你可以return [$lookup_main, $item[$result_column]];而不是在你的$result变量中硬编码它。如果你没有找到$lookup_sub,那么只需return [$lookup_main, false]; -
@RiggsFolly 感谢您的建议,我会阅读并修复它:)
-
@Frankich 这对我很有帮助,谢谢 :) 你对我的问题还有其他想法吗?
标签: php multidimensional-array foreach