加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP将数组’a’,’b’,’c’转换为’a / b / c’,’a / b’,’a

发布时间:2020-12-13 22:34:24 所属栏目:PHP教程 来源:网络整理
导读:我有一个uri,想要得到一系列以完全uri血统开始的部分,直到我只有第一个uri部分为止.我也有域名,但段从末尾开始拼接. String 'a/b/c' to array('a/b/c','a/b','a')String 'test.domain.com' to array('test.domain.com','domain.com','com') 基于我的初始方法
我有一个uri,想要得到一系列以完全uri血统开始的部分,直到我只有第一个uri部分为止.我也有域名,但段从末尾开始拼接.

String 'a/b/c' to array('a/b/c','a/b','a')
String 'test.domain.com' to array('test.domain.com','domain.com','com')

基于我的初始方法和第二种方法的答案和第三种方法,我想知道哪一种是最快的,也许还有第四种方法更好……

方法1:

function explode_special($delimiter,$string,$reverse = false)
{
    if (strpos($string,$delimiter) === false) return array($string);

    $segments = explode($delimiter,$string);

    if ( ! $reverse)
    {
        array_walk($segments,function($v,$k,$d) use(&$segments,&$delimiter) {
            $d[$k] = implode($delimiter,array_slice($segments,(count($segments) - $k)));
        },&$parts);
    }
    else
    {
        array_walk($segments,$k));
        },&$parts);
    }

    return $parts;
}

方法2:

function explode_special($delimiter,$string);

    $parts = array();

    while ($segments)
    {
        $parts[] = implode($delimiter,$segments);

        if ($reverse)
        {
            array_shift($segments);
        }
        else
        {
            array_pop($segments);
        }
    }

    return $parts;
}

方法3:

function explode_special($delimiter,$delimiter) === false) return array($string);

    $parts = array($string);

    for ($i = substr_count($string,$delimiter); $i > 0; $i--)
    {
        $parts[] = $string = $reverse
        //  ? trim(strstr($string,$delimiter),$delimiter)
            ? substr($string,strpos($string,$delimiter) + 1)
            : substr($string,strrpos($string,$delimiter));
    }

    return $parts;
}

输出:

// explode_special('/','a/b/c') = array('a/b/c','c');
// explode_special('.','test.domain.com',true) = 
//     array('test.domain.com','com');

解决方法

function multisplit($delim,$str) {
    $parts = explode($delim,$str);
    $arr = Array();
    while($parts) {
        $arr[] = implode($delim,$parts);
        array_pop($parts);
    }
    return $arr;
}

使用该功能,您只需调用multisplit(“/”,“a / b / c”);它将返回[‘a / b / c’,’a / b’,’a’].同样,调用multisplit(“.”,“test.domain.com”);并得到[‘test.domain.com’,’test.domain’,’test’].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读