开发者

Function for each subfolder in PHP

I am new in PHP and can't figure out how to do this:

$link = 'http://www.domainname.com/folder1/folder2/folder3/folder4';

$domain_and_slash = http://www.domainname.com . '/';

$address_without_site_url = str_replace($domain_and_slash, '', $link);

fo开发者_如何学Pythonreach ($folder_adress) {
// function here for example
echo $folder_adress;
}

I can't figure out how to get the $folder_adress.

In the case above I want the function to echo these four:

  • folder1
  • folder1/folder2
  • folder1/folder2/folder3
  • folder1/folder2/folder3/folder4

The $link will have different amount of subfolders...


This gets you there. Some things you might explore more: explode, parse_url, trim. Taking a look at the docs of there functions gets you a better understanding how to handle url's and how the code below works.

$link = 'http://www.domainname.com/folder1/folder2/folder3/folder4';
$parts = parse_url($link);
$pathParts = explode('/', trim($parts['path'], '/'));

$buffer = "";                                                                                                                                                                                                                                                                 
foreach ($pathParts as $part) {
    $buffer .= $part.'/';

    echo $buffer . PHP_EOL;
}

/*
Output:

folder1/
folder1/folder2/
folder1/folder2/folder3/
folder1/folder2/folder3/folder4/
*/


You should have a look on explode() function

array explode ( string $delimiter , string $string [, int $limit ] )

Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by the string delimiter.

Use / as the delimiter.


This is what you are looking for:

$link = 'http://www.domainname.com/folder1/folder2/folder3/folder4';
$domain_and_slash = 'http://www.domainname.com' . '/';
$address_without_site_url = str_replace($domain_and_slash, '', $link);
// this splits the string into an array
$address_without_site_url_array = explode('/', $address_without_site_url);
$folder_adress = '';
// now we loop through the array we have and append each item to the string $folder_adress
foreach ($address_without_site_url_array as $item) {
  // function here for example
  $folder_adress .= $item.'/';
  echo $folder_adress;
}

Hope that helps.


Try this:

$parts = explode("/", "folder1/folder2/folder3/folder4");
$base = "";
for($i=0;$i<count($parts);$i++){
    $base .= ($base ? "/" : "") . $parts[$i];
    echo $base . "<br/>";
}


I would use preg_match() for regular expression method:

$m = preg_match('%http://([.+?])/([.+?])/([.+?])/([.+?])/([.+?])/?%',$link)

// $m[1]: domain.ext
// $m[2]: folder1
// $m[3]: folder2
// $m[4]: folder3
// $m[5]: folder4


1) List approach: use split to get an array of folders, then concatenate them in a loop.

2) String approach: use strpos with an offset parameter which changes from 0 to 1 + last position where a slash was found, then use substr to extract the part of the folder string.

EDIT:

<?php
  $folders = 'folder1/folder2/folder3/folder4';


  function fn($folder) {
    echo $folder, "\n";
  }

  echo "\narray approach\n";
  $folder_array = split('/', $folders);
  foreach ($folder_array as $folder) {
    if ($result != '')
      $result .= '/';
    $result .= $folder;
    fn($result);
  }

  echo "\nstring approach\n";
  $pos = 0;
  while ($pos = strpos($folders, '/', $pos)) {
    fn(substr($folders, 0, $pos++));
  }
  fn($folders);
?>


If I had time, I could do a cleaner job. But this works and gets across come ideas: http://codepad.org/ITJVCccT

Use parse_url, trim, explode, array_pop, and implode

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜