Функция для каждой подпапки в PHP - PullRequest
0 голосов
/ 27 марта 2011

Я новичок в PHP и не могу понять, как это сделать:

$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);

foreach ($folder_adress) {
// function here for example
echo $folder_adress;
}

Я не могу понять, как получить $ folder_adress.

В приведенном выше случае я хочу, чтобы функция повторяла эти четыре:

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

Ссылка $ будет иметь разное количество подпапок ...

Ответы [ 7 ]

2 голосов
/ 27 марта 2011

Это приведет вас туда.Некоторые вещи, которые вы могли бы изучить больше: взорваться , parse_url , trim .Изучив документы этих функций, вы лучше поймете, как обращаться с URL-адресами и как работает приведенный ниже код.

$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/
*/
0 голосов
/ 27 марта 2011

Я бы использовал preg_match () для метода регулярных выражений:

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

// $m[1]: domain.ext
// $m[2]: folder1
// $m[3]: folder2
// $m[4]: folder3
// $m[5]: folder4
0 голосов
/ 27 марта 2011

Попробуйте это:

$parts = explode("/", "folder1/folder2/folder3/folder4");
$base = "";
for($i=0;$i<count($parts);$i++){
    $base .= ($base ? "/" : "") . $parts[$i];
    echo $base . "<br/>";
}
0 голосов
/ 27 марта 2011

Если бы у меня было время, я мог бы сделать работу чище.Но это работает и находит идеи: http://codepad.org/ITJVCccT

Использование parse_url , trim , explode , array_pop и взорвется

0 голосов
/ 27 марта 2011

Это то, что вы ищете:

$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;
}

Надеюсь, это поможет.

0 голосов
/ 27 марта 2011

Вы должны взглянуть на explode () function

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

Возвращает массив строк, каждыйиз которых является подстрокой строки, образованной разбиением ее по границам, образованным разделителем строк.

Используйте / в качестве разделителя.

0 голосов
/ 27 марта 2011

1) Подход списка: используйте split, чтобы получить массив папок, затем объедините их в цикле.

2) Подход строки: используйте strpos с параметром смещения, который изменяется от 0 до1 + последняя позиция, где была найдена косая черта, затем используйте substr для извлечения части строки папки.

РЕДАКТИРОВАТЬ:

<?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);
?>
...