Как вы разделяете строку, как это? PHP

В настоящее время я пытаюсь создать генератор случайных изображений в PHP, и мне трудно установить путь к файлу, я могу получить все пути к файлам, но они находятся в одной длинной строке, как это.

" ../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG"

с " .." отмечая начало нового файла.

Как бы я взорвал (или что-то в этом роде) каждый путь_файла, чтобы вернуть их отдельно?

4 ответа

<?php 
//Since new file path is starting from ".." we explode it using ".." and added to each file path.


      $string ="../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG";
      $file_path=explode('..',$string);
      $i=0;
      while(isset($file_path[++$i])){
        $file_path[$i]="..".$file_path[$i];
        echo $file_path[$i]."<br />";

      }

   ?>

Вот один из способов сделать это.

$data  = '../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG';
$files = preg_split('/(?<!^)(?=\.{2})/', $data);
print_r($files);

Выход

Array
(
    [0] => ../images/box1/IMG_3158.JPG
    [1] => ../images/box1/IMG_3161.JPG
    [2] => ../images/box1/IMG_3163.JPG
    [3] => ../images/box1/IMG_3158.JPG
    [4] => ../images/box1/IMG_3161.JPG
    [5] => ../images/box1/IMG_3163.JPG
)

Регулярное выражение:

(?<!            look behind to see if there is not:
  ^               the beginning of the string
)               end of look-behind
(?=             look ahead to see if there is:
  \.{2}           '.' (2 times)
)               end of look-ahead

http://ideone.com/MTRr9Q

Просто используйте explode()

$file_paths = explode('..', $input);

пример

$string = "../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG../images/box1/IMG_3158.JPG../images/box1/IMG_3161.JPG../images/box1/IMG_3163.JPG";
$file_paths = explode('..', $string);
var_dump($file_paths);

Это полоски ".." в начале, так что попробуйте добавить его самостоятельно. Для более сложных ситуаций, preg_split() будет соответствующей задачей. Учитывая, что ваша строка не меняется, тогда может произойти взрыв.

Если вы можете ввести неиспользуемый символ между каждым путем при импорте (?) Списка имен путей, вы можете использовать этот символ в качестве разделителя вместо ".." (см. Ответ Али).

Другие вопросы по тегам