douxiong0668 2019-03-23 18:41 采纳率: 100%
浏览 107
已采纳

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

I want to get the strings after each : and before each from the following:

När:Sent lördag kväll och natt till söndag
Var:Främst norra Jämtland
Intensitet:Väst ca 21 m/s
Kommentar:-

Source (alert[4]->info->description as of this question were asked): https://opendata-download-warnings.smhi.se/api/version/2/alerts.json

I've tried with explode() but after that, I am clueless of how I can remove Var and the others from the arrays.

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) "-"
}

Here's how I want it to look like:

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) "-"
}

Here's how I tried so far:

$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("
", $desc);    # Don't know how to explode by 
 since it returns an error; explode() expects parameter 2 to be string
        echo '<pre>'; var_dump($desc); echo '</pre>';
    }
}
  • 写回答

2条回答 默认 最新

  • dongyu3967 2019-03-23 18:48
    关注

    You can use regex to capture what is between : and .

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

    Output:

    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
            )
    
    )
    

    https://3v4l.org/rpu5E


    Sadly my regex mojo is not with me today...
    So I had to switch to good old explode and array_functions.
    I multiexplode the array on : and then I intersect the array on the uneven keys using range() to get the keys needed.
    $text = "När:Sent lördag kväll och natt till söndag
    Var:Främst norra Jämtland
    Intensitet:Väst ca 21 m/s
    Kommentar:Sydväst 14-17 m/s. Avtagande söndag morgon.";
    
    $exploded = multiexplode(array("
    ",":"), $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);
    

    Output:

    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] => -
    )
    

    If you need 0 indexed array use array_values to reset the keys.
    https://3v4l.org/tbgLM

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?