PHP转换数组';a'';b'';c';至';a/b/c'';a/b'';a';
我有一个uri,希望得到一个从完整uri下降开始的部分数组,直到我只有第一个uri段作为部分。我也有域名,但部分得到缝合开始从结束回来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
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;
}