在PHP中的数组数组中搜索字符串

在PHP中的数组数组中搜索字符串,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有一个这样的数组。我从服务器的响应中得到: 所以有时候数组是这样的: $array = Array ( [0] => Message: Thanks for all [1] => Response: Goodbye [2] => [3] => inactive [4] => active call [5] => active chann

我有一个这样的数组。我从服务器的响应中得到:

所以有时候数组是这样的:

$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\u walk
strpos
,解决方案基于提供的输入

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

如果目标是获得
活动通道
之后的所有值,并假设数组中的所有值都以数字索引,则可以使用
数组搜索()查找
活动通道
元素。这将返回该元素的键(第一次出现)。将其与
array\u slice()
一起使用,将第一个元素切掉。将1添加到
array\u search()
的返回中,因为您也希望删除它

$key=array\u搜索('activechannels',$array);
$output=array\u slice($array,$key+1);
如果您的数组没有数字索引,您可以先使用
array\u values()
获取值,这是同一个数组,只是数字索引

$array=array\u值($array);
$key=array\u search('activechannels',$array);
$output=array\u slice($array,$key+1);
  • 现场演示

事件:
不存在于第一种类型的数组中。那么你是如何得出这样的结果的呢。你能详细说明一下吗?所以基本上你想得到
活动通道
值之后的所有元素?所以你总是想从原始数组中得到发生[8]和[9],不管数组中是否包含带有
事件:
的发生?是吗?你能解释一下你的目标背后的逻辑,而不是展示你的解决方案,并期望我们理解你的问题吗?@Qirel说了什么。您只需要“活动频道”之后的所有内容?如果最后一个元素中的单词包含
活动
?@Qirel这就是我提到
的原因解决方案基于提供的输入
$res = [];
array_walk($array, function($v, $k) use (&$res){
  if(strpos($v, ':') === false && strpos($v, 'active') === false && $v != ''){
    $res[] = $v;
  }
});