поиск строки в массиве массивов в PHP - PullRequest
1 голос
/ 24 июня 2019

У меня есть такой массив. Я получаю это из ответа сервера:

Так что иногда массив выглядит так:

$array = 
    Array
    (
        [0] => Message: Thanks for all 
        [1] => Response: Goodbye
        [2] => 
        [3] =>  inactive
        [4] =>  active call
        [5] =>  active channels
        [6] =>  Hello                                             
        [7] =>  Hi
        [8] =>  yes     
        [9] =>  no      
    )

и иногда это так:

$array = 
    Array
    (
        [0] => Message: Thanks for all 
        [1] => Response: Goodbye
        [2] => 
        [3] => SessionTV: 2019-06-24T17:29:53.925+0530
        [4] => SessionTV: 2019-06-24T17:29:53.925+0530
        [5] => SessionTV: 2019-06-24T17:29:53.925+0530
        [6] => Event: 0
        [7] =>  active channels
        [8] =>  Hello                                             
        [9] =>  Hi
        [10] =>             
    )

Вот что я попробовал:

if (in_array("Event:", $array)) 
  { 

        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
  } 
else
  { 

        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
        array_shift($minarr);
    } 

Но это не работает.

Ожидаемый результат в обоих случаях:

Array
(
    [0] =>  Hello                                             
    [1] =>  Hi
    [2] =>  yes   
    [3] =>  no        
)

и

Array
(
    [0] =>  Hello                                             
    [1] =>  Hi
    [2] =>        
)

Таким образом, я просто смещаю несколько строк из массива, если он содержит строку Event:, и смещаю некоторые другие строки, если он не содержит строку Event:.

Как мне найти строку в массиве, подобную этой?

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Если цель состоит в том, чтобы получить все значения после active channel и при условии, что все значения в массиве проиндексированы численно, то вы можете найти элемент active channels с array_search(). Это возвращает ключ этого элемента (первое вхождение). Используйте это с array_slice(), чтобы вырезать эти первые элементы. Добавьте 1 к возвращению array_search(), поскольку вы также хотите удалить это.

$key = array_search('active channels', $array);
$output = array_slice($array, $key + 1);

Если ваш массив не имеет числовой индексации, вы можете извлечь значения, используя сначала array_values(), то есть тот же массив, только с числовой индексацией.

$array = array_values($array);
$key = array_search('active channels', $array);
$output = array_slice($array, $key + 1);
1 голос
/ 24 июня 2019

вы можете использовать array_walk с strpos, решение основано на предоставленном вводе

$res = [];
array_walk($array, function($v, $k) use (&$res){
  if(strpos($v, ':') === false && strpos($v, 'active') === false && $v != ''){
    $res[] = $v;
  }
}); 

https://3v4l.org/JDFZg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...