首页 > 解决方案 > 在 PHP 中的数组数组中搜索字符串

问题描述

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

所以有时数组是这样的:

$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:

如何在这样的数组中搜索字符串?

标签: phparrayssortingmultidimensional-array

解决方案


如果目标是获取 之后的所有值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()first 获取值,它是同一个数组,只是数字索引。

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

推荐阅读