微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP数组中的内爆邻居元素按索引

如何解决PHP数组中的内爆邻居元素按索引

我在一个循环中内爆数组中的连续单词(相对于索引号)

$array=array(
    1=>array('First','word'),5=>array('Second',6=>array('Third',7=>array('-','non-word'),8=>array('Fourth',10=>array('Fifth','word')
);

$prev=-1;
$results=array();
foreach($array as $key=>$v){
    $value=$v[0];
    $type=$v[1];
    if($key==$prev+1){ // check if the index is successive
        $results[]=$value; // possibly $results=array('value'=>$value,'type'=>$type);
    }else{
        echo implode(' ',$results).PHP_EOL; // HERE is the question
        $results=array($value);
    }
    $prev=$key;
}

echo implode(' ',$results).PHP_EOL; // echoing remaining $result

我的问题是我不知道如何实现 non-word 的条件(例如,连字符、/ 等)。

在上面的示例中,$valueif($type=='non-word') 周围不应有空格。

预期的输出

First
Second Third-Fourth
Fifth

总的来说,我想找到一种方法来合并类型的条件(例如,如果它在组的开头或结尾,则省略 non-word)。

解决方法

我只是在学习正则表达式,但这种方法似乎有效,尽管不可否认它并不漂亮 - 在数组中标记您的非单词,以便在事后很容易用 preg_replace 替换它们

$array=array(
    1=>array('First','word'),5=>array('Second',6=>array('Third',7=>array('-','non-word'),8=>array('Fourth',10=>array('Fifth','word')
);

$prev=-1;
$results=array();
foreach($array as $key=>$v){
    $type=$v[1];
    $value= $type=="non-word" ? "%%".$v[0]."%%" : $v[0];
    if($key==$prev+1){ // check if the index is successive
        $results[]=$value; // possibly $results=array('value'=>$value,'type'=>$type);
    }else{
        $output = implode(' ',$results); // HERE is the question
        $output = preg_replace("/ %%(.*?)%% /","$1",$output);
        echo $output.PHP_EOL;
        $results=array($value);
    }
    $prev=$key;
}

实际效果如下:https://www.tehplayground.com/wmPSi5wP6eLcBAdk

,

遍历每一项,并输出它,那么需要做的就是:

  • 检查下一个值是否连续,如果:
    • :添加新行。
    • :and 是一个词,current 不是一个非词,加一个空格。
<?php
$array=array(
    1=>array('First','word')
);

foreach ($array as $key => $value) {
    echo $value[0];
    if (!isset($array[$key+1])) {
        echo PHP_EOL;
    } else if($array[$key+1][1] === 'word' && $array[$key][1] !== 'non-word') {
        echo ' ';
    }
}

结果:

First
Second Third-Fourth
Fifth

https://3v4l.org/IFVa0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。