Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从数组中删除新行后面的单词?_Php_Arrays_Split_Explode - Fatal编程技术网

Php 如何从数组中删除新行后面的单词?

Php 如何从数组中删除新行后面的单词?,php,arrays,split,explode,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截至此问题已被询问): 我尝试过使用explode(),但之后,我不知道如何从数组中删除\nVar和其他 array(5) { [0]=> strin

我想从以下位置获取每个
之后和每个
\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
截至此问题已被询问):

我尝试过使用
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>';
    }
}
$content=file\u get\u contents('https://opendata-download-warnings.smhi.se/api/version/2/alerts.json');
$content=json_decode($content);
foreach($content->alert AS$alert){
如果($alert->info->area->areaDesc=='013'){
$desc=分解(“:”,$alert->info->description);
$descc=explode(“\n”,$desc);#不知道如何按\n分解,因为它返回一个错误;explode()要求参数2是字符串
回显“”;变量转储($desc);回显“”;
$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);
} }
您可以使用正则表达式捕获
\n
之间的内容

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
        )

)
输出:

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


遗憾的是,我的regex mojo今天不在我身边……
因此,我不得不切换到旧的explode和array_函数。
我在
\n
上多次分解数组,然后使用range()在不均匀关键点上与数组相交,以获得所需的关键点

Array
(
    [1] => Sent lördag kväll och natt till söndag
    [3] => Främst norra Jämtland
    [5] => Väst ca 21 m/s
    [7] => -
)
输出:

$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);
    <?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') );
 ?>
如果需要0索引数组,请使用数组_值重置键。

您可以使用此功能

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
 )

由于返回错误,不知道如何按\n分解;explode()要求参数2为字符串
ehm。。。您正在尝试分解数组,因为
$desc
是数组。确定。我没有那样想:)谢谢你,但这个问题仍然是个问题,因为我不知道下一步该怎么办。谢谢你的回答。尽管当
Kommentar:
是空的或者是
$alert[int]->info->description
中唯一的字符串时,这种方法还是非常有效的。该内容返回为空,即使其中包含内容,如下所示:
Kommentar:Natt till söndag och söndag morgon väst eller sydväst ca 15 m/s.
(相同的源代码,但对于
$alert[0]->info->description
,截至撰写此评论时)。我刚刚注意到。正在修复。不过我确实注意到了一个bug。如果我将
$text
中的字符串更改为
Kommentar:Sydväst 14-17 m/s。Avtagande söndag morgon。
我收到以下错误:
警告:范围():步骤超出了第18行F:\Websites\www\vadret justnu\index.php中的指定范围。警告:array_flip()希望参数1是数组,bool在第18行的F:\Websites\www\vadret justnu\index.php中给出。警告:array_intersect_key():参数2应为数组,在第18行的F:\Websites\www\vadret justnu\index.php中为空。另一个选项是这样的关联数组:当我在
foreach
循环中使用
$alert->info->description
而不是
$sample
尝试它时,它只返回一个空数组。但如果我使用纯文本(就像你的答案中那样),效果很好。这怎么可能呢。您使用的是
还是
$alert->info->description