У меня есть массив массивов, которые содержат ключ массива со значением, вот пример:
$text = [
[
'Hotel' => 'N',
'Jayakarta' => 'NE',
'Jaya' => 'NE',
'sangat' => 'ADV',
'nyaman' => 'ADJ',
'ditempati' => 'V.'
]
,
[
'Andi' => 'NOB',
'menginap' => 'V',
'di' => 'PREP',
'Hotel' => 'N',
'Neo' => 'NE',
'Malioboro => 'NE',
'selama' => 'N',
'satu' => 'NUM',
'minggu' => 'N.'
]
];
И у меня есть префикс массива, который содержит:
$prefix = [ [0] => Hotel [1] => Hostel [2] => Losmen [3] => Motel [4] => Penginapan [5] => Pesanggrahan [6] => Pondok [7] => Wisma ]
Если элементы $ prefix находятся в массиве $ text, я проверю значение следующего массива текста. Если значение массива равно N или NE, я сделаю вывод из текста префикса до конца массива, содержащего значение N или NE.
Вот что я сейчас делаю:
foreach($text as $index => $tok){
foreach ($tok as $tokkey => $tokvalue) {
if(in_array($tokkey, $prefix)){
echo $tokkey;
$next = next($tok);
if($tokvalue == "N" or $tokvalue == "NE"){
echo key($tok);
}
}
}
}
На выходе я получил:
Hotel Jayakarta, Hotel menginap
Ожидаемый результат должен быть:
- Hotel Jayakarta Jaya
- Hotel Neo Malioboro selama
Любая помощь высоко ценится, спасибо.
Ниже приведены шаги, которым я следовал, чтобы получить желаемый результат.
1) Если токок присутствует в массиве префиксов, вызовите функцию.
2) Создать новый массив, начиная с элемента, который совпадает с префиксом массива.
3) Зациклить новый массив и проверить, чтобы следующее значение было «N» или «NE»
4) Показать эти ключи из массива.
foreach($text as $index => $tok){
foreach ($tok as $tokkey => $tokvalue) {
if(in_array($tokkey, $prefix)){
getKeys($tokkey,$tok);
echo "<br/>";
}
}
}
function getKeys($tokkey,$tok){
$flag = 0;
echo $tokkey.' ';
foreach($tok as $k=>$v){
if($k==$tokkey){
$flag = 1;
}
if($flag){
$new_array[$k]=$v;
}
}
foreach($new_array as $k=>$v){
$ff = next($new_array);
if(($ff == 'NE' || $ff == 'N')){
echo key($new_array).' ';
}
}
}
Выход:
Отель Джаякарта Джая
Отель Нео Малиоборо Селама
http://sandbox.onlinephpfunctions.com/code/2777d3ab3d34c941c23886d42e537cde7fff2351
Из того, что я понимаю из вашего текста, вам нужно заменить if()
это работает только один раз, для while()
который работает в то время как next()
строка является NE или N.
foreach($text as $index => $tok){
foreach ($tok as $tokkey => $tokvalue) {
if(in_array($tokkey, $prefix)){
echo $tokkey;
next($tok);
while($tokvalue == "N" || $tokvalue == "NE")
{ echo key($tok);
next($tok);
$tokvalue = current($tok);
}
}
}
echo "\n";
}
}