我有一个像这样的数组。我是从服务器的响应中得到的:
所以有时数组是这样的:
$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:
的其他行。
如何在这样的数组中搜索字符串?
答案 0 :(得分:1)
您可以将array_walk
与strpos
一起使用,该解决方案基于提供的输入
$res = [];
array_walk($array, function($v, $k) use (&$res){
if(strpos($v, ':') === false && strpos($v, 'active') === false && $v != ''){
$res[] = $v;
}
});
答案 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);
};
....