簡體   English   中英

在PHP的數組數組中搜索字符串

[英]search for a string in array of arrays in 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:

如何在這樣的數組中搜索字符串?

您可以將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 channel之后的所有值,並假定數組中的所有值都已進行數字索引,則可以使用array_search()找到active channels元素。 這將返回該元素的鍵(第一次出現)。 將其與array_slice()一起使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM