У меня есть некоторая проблема в создании функции с помощью '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"].
Мой код такой:
<code>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), '
';
Но вывод равен [null 115_AFT CLN] ...
Что я делаю неправильно? Как я могу это исправить и как-то быстрее искать? (PHP 7.0)