Распечатать следующий массив после соответствующего массива

У меня есть массив массивов, которые содержат ключ массива со значением, вот пример:

$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

Любая помощь высоко ценится, спасибо.

0

Решение

Ниже приведены шаги, которым я следовал, чтобы получить желаемый результат.

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

0

Другие решения

Из того, что я понимаю из вашего текста, вам нужно заменить 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";
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector