【问题标题】:search for a string in array of arrays in PHP在 PHP 中的数组数组中搜索字符串
【发布时间】:2019-06-24 12:20:38
【问题描述】:

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

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

$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:,则移动一些其他行。

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

【问题讨论】:

  • Event: 不存在于第一种类型的数组中。那么你是怎么想出这样的结果的。你能详细说明一下吗?
  • 所以基本上你想得到所有元素之后 active channels 值?
  • 因此,无论数组中是否包含Event: 的出现,您总是希望原始数组中出现[8] 和[9]? 是吗?
  • 您能否解释一下您的目标背后的逻辑,而不是展示您的解决方案并期望我们理解您的问题?
  • @Qirel 说了什么。您只想要“活跃频道”之后的所有内容?

标签: php arrays sorting multidimensional-array


【解决方案1】:

如果目标是获取active channel 之后的所有值,并假设数组中的所有值都按数字索引,那么您可以找到active channels 元素与array_search()。这将返回该元素的键(第一次出现)。将此与 array_slice() 一起使用以切掉那些第一个元素。 array_search() 的返回值加 1,因为您也想删除它。

$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);

【讨论】:

    【解决方案2】:

    您可以使用 array_walkstrpos ,解决方案基于提供的输入

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

    https://3v4l.org/JDFZg

    【讨论】:

    • 如果最后一个元素中的单词包含:active 怎么办?
    • @Qirel 这就是为什么我提到the solution is based on the provided input
    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 2013-03-31
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多