在PHP

时间:2019-06-24 12:20:38

标签: php arrays sorting multidimensional-array

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

所以有时数组是这样的:

$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 个答案:

答案 0 :(得分:1)

您可以将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

答案 1 :(得分:1)

如果目标是获取active channel之后的所有值,并假定数组中的所有值都已进行数字索引,则可以使用active channels找到array_search()元素。这将返回该元素的键(第一次出现)。将其与array_slice()一起使用可分割掉第一个元素。您也想将其添加到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); 是同一数组,只是被数字索引。

....
function Remove_space() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Input");

  var r = sheet.getRange("E4:E50");
  var v = r.getValues();

  for(var k=0;k<v.length;k++)
    for(var j=0;j<v[0].length;j++)
      v[k][j]=v[k][j].toString().replace(/\s/g, "");
  r.setValues(v);
};
....