如何从换行符中删除单词?

时间:2019-03-23 18:41:46

标签: php arrays split explode

我想从以下各个字符串中获取每个:之后和每个\n之前的字符串:

När:Sent lördag kväll och natt till söndag\nVar:Främst norra Jämtland\nIntensitet:Väst ca 21 m/s\nKommentar:-

来源(此问题被问到{alert[4]->info->description):https://opendata-download-warnings.smhi.se/api/version/2/alerts.json

我尝试使用explode(),但是在那之后,我不知道如何从数组中删除\nVar和其他数组。

array(5) {
  [0]=>
  string(4) "När"
  [1]=>
  string(45) "Sent lördag kväll och natt till söndag
Var"
  [2]=>
  string(34) "Främst norra Jämtland
Intensitet"
  [3]=>
  string(25) "Väst ca 21 m/s
Kommentar"
  [4]=>
  string(1) "-"
}

这就是我想要的样子:

array(5) {
  [0]=>
  string(45) "Sent lördag kväll och natt till söndag"
  [1]=>
  string(34) "Främst norra Jämtland"
  [2]=>
  string(25) "Väst ca 21 m/s"
  [3]=>
  string(1) "-"
}

到目前为止,这是我尝试过的方法:

$content = file_get_contents('https://opendata-download-warnings.smhi.se/api/version/2/alerts.json');
$content = json_decode($content);

foreach($content->alert AS $alert) {
    if($alert->info->area->areaDesc == '013') {
        $desc = explode(':', $alert->info->description);
        $descc = explode("\n", $desc);    # Don't know how to explode by \n since it returns an error; explode() expects parameter 2 to be string
        echo '<pre>'; var_dump($desc); echo '</pre>';
    }
}

2 个答案:

答案 0 :(得分:2)

您可以使用正则表达式捕获Patient_ID Age Gender Tumor_Size Nearby_Cancer_Lymphnodes tcga.5l.aat0 42 female t2 n0 :之间的内容。

\n

输出:

$text = "När:Sent lördag kväll och natt till söndag\nVar:Främst norra Jämtland\nIntensitet:Väst ca 21 m/s\nKommentar:-";
preg_match_all("/\w+:(.*?)\\n/", $text, $match);
print_r($match);

https://3v4l.org/rpu5E


可悲的是我的regex mojo今天不在我身边...
所以我不得不改用旧的爆炸和array_functions。
我将Array ( [0] => Array ( [0] => r:Sent lördag kväll och natt till söndag [1] => Var:Främst norra Jämtland [2] => Intensitet:Väst ca 21 m/s ) [1] => Array ( [0] => Sent lördag kväll och natt till söndag [1] => Främst norra Jämtland [2] => Väst ca 21 m/s ) ) :上的数组多重分解,然后使用range()将数组与不均匀键相交以获得所需的键。

\n

输出:

$text = "När:Sent lördag kväll och natt till söndag\nVar:Främst norra Jämtland\nIntensitet:Väst ca 21 m/s\nKommentar:Sydväst 14-17 m/s. Avtagande söndag morgon.";

$exploded = multiexplode(array("\n",":"), $text);
if(count($exploded) > 2){
    $range = array_flip(range(1,count($exploded),2));
}else{
    $range = ["1" => 1];
}

$result = array_intersect_key($exploded, $range);
print_r($result);

如果您需要0个索引数组,请使用array_values重置键。
https://3v4l.org/tbgLM

答案 1 :(得分:0)

您可以使用此功能

    <?php
function getContents($str, $startDelimiter, $endDelimiter) {
  $contents = array();
  $startDelimiterLength = strlen($startDelimiter);
  $endDelimiterLength = strlen($endDelimiter);
  $startFrom = $contentStart = $contentEnd = 0;
  while (false !== ($contentStart = strpos($str, $startDelimiter, $startFrom))) {
    $contentStart += $startDelimiterLength;
    $contentEnd = strpos($str, $endDelimiter, $contentStart);
    if (false === $contentEnd) {
      break;
    }
    $contents[] = substr($str, $contentStart, $contentEnd - $contentStart);
    $startFrom = $contentEnd + $endDelimiterLength;
  }

  return $contents;
}

$sample = 'När:Sent lördag kväll och natt till söndag\nVar:Främst norra Jämtland\nIntensitet:Väst ca 21 m/s\nKommentar:-';
print_r( getContents($sample, ':', '\n') );
 ?>

结果

Array
 (
   [0] => Sent lördag kväll och natt till söndag
   [1] => Främst norra Jämtland
   [2] => Väst ca 21 m/s
 )