Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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转换数组';a'';b'';c';至';a/b/c'';a/b'';a';_Php_Arrays_Dns_Uri - Fatal编程技术网

PHP转换数组';a'';b'';c';至';a/b/c'';a/b'';a';

PHP转换数组';a'';b'';c';至';a/b/c'';a/b'';a';,php,arrays,dns,uri,Php,Arrays,Dns,Uri,我有一个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

我有一个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, 0, (count($segments) - $k)));
        }, &$parts);
    }
    else
    {
        array_walk($segments, function($v, $k, $d) use(&$segments, &$delimiter) {
            $d[$k] = implode($delimiter, array_slice($segments, $k));
        }, &$parts);
    }

    return $parts;
}
方法2:

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

    $segments = explode($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, $string, $reverse = false)
{
    if (strpos($string, $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, 0, strrpos($string, $delimiter));
    }

    return $parts;
}
输出:

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

使用该函数,您只需调用
multiplit(“/”,“a/b/c”)
并且它将返回
['a/b/c','a/b','a']
。类似地,调用
multiplit(“.”,“test.domain.com”)
和get
['test.domain.com','test.domain','test']

<?php

header("Content-type: text/plain"); //For display purposes only

/**
 * Returns an array of strings with diminishing elements of $string according to $delimiter
 *
 * @param string $string        The string
 * @param string $delimiter     The delimiter
 *
 * @return string[]             Array of strings
 */
function degrading_split($string, $delimiter) {
    $exploded = explode($delimiter, $string);   //Array version of the string
    $result   = array();                        //Initialize result array

    foreach ($exploded as $key => $value) {     //Iterate the array

        $result[] = implode(                    #Implode...
            $delimiter,                         #Using the original delimiter
            array_slice($exploded, $key)        #The complete $exploded array starting from the current $key
        );
    }

    return $result;

}

print_r(degrading_split("a/b/c/d", "/"));

您对正则表达式的看法如何

function splitString($string,$delim) {
    $arr = array();
    preg_match_all('~['.$delim.']~U',$string,$delimCounter);
    $arr[] = $string;
    for ($i = 0;$i<count($delimCounter[0]);$i++) {
        $string = $arr[] = preg_replace('~^[^.]*['.$delim.']~',"",$string);
    }
    return $arr;
}
函数splitString($string,$delim){
$arr=array();
preg_match_all(“~[”.$delim.]~U',$string,$delimCounter);
$arr[]=$string;

对于($i=0;$iNice,但域方法的顺序相反,不是test.domain而是domain.comyes123,您阅读了我的问题吗?数组\u反转将不起作用
function splitString($string,$delim) {
    $arr = array();
    preg_match_all('~['.$delim.']~U',$string,$delimCounter);
    $arr[] = $string;
    for ($i = 0;$i<count($delimCounter[0]);$i++) {
        $string = $arr[] = preg_replace('~^[^.]*['.$delim.']~',"",$string);
    }
    return $arr;
}