Поиск корневой директории в строке

287
03 июня 2017, 17:34

Есть строки:

  1. /home/i/p/S/var/DR/IN/m/1;/home/i/p/DIRS/var/DR/IN/D/1;/home/i/p/S/var/DR/IN/m/4;

  2. /home/i/p/SU/var/DR/I/s/1;/home/i/p/SU/var/DR/I/s/3;/home/i/p/SU/var/DR/I/s/5;

Нужно найти строки у которых общий корень — общая директория и оставить только общий корень (из 1 строки оставить только /home/i/p/S/var/DR/IN/m из 2 сроки оставить только /home/i/p/SU/var/DR/I/s и т.д. со всеми строками). При этом некоторые директории могут этот общий корень не иметь.

Сравнивать все строки через preg_match мне кажется как-то не эффективно. Может есть более красивое решение?

Answer 1

Mожет функциями explode и implode решить вопрос, разделить строки на знак /, потом сново собрать?

$str = '/home/i/p/SU/var/DR/I/s/1';
$tmp_arr = explode('/',$str);
unset($tmp_arr[count($tmp_arr)-1]); убираем последний элемент массива.
$str = implode('/',$tmp_arr);
Answer 2

Попробуйте развить

// делим строку по точке с запятой
$stringMain = "/home/i/p/S/var/DR/IN/m/1;/home/i/p/S/var/DR/IN/m/2;/home/i/p/S/var/DR/IN/m/4;";
$piecesMain = explode(";", $stringMain);
$compare = []; //создаем пустой массив для сравнения
for ($i = 0; $i < count($piecesMain[0]); $i++)
    { //создаем массив сначала из первого элемента массива
    $pieces0 = explode("/", $piecesMain[0]);
    for ($k = 0; $k < count($pieces0); $k++)
        {
        // echo $pieces0[$k]."\n";
        $compare[] = $pieces0[$k]; //заполняем его
        }
    }
for ($z = 1; $z < count($piecesMain); $z++)
    { //перебираем остальные элементы главного массива кроме первого
    $piecesZ = explode("/", $piecesMain[$z]);
    $result_array = array_intersect_assoc($compare, $piecesZ); //сравниваем их с первым элементом, выводим расхождение
    // echo $result_array."\n";
    for ($y = 0; $y < count($result_array); $y++)
        {
        echo $result_array[$y] . "/";//собираем каждый элемент главной строки (после сравнения)
        }
    echo "\n";
    }

на выходе

 /home/i/p/S/var/DR/IN/m/
 /home/i/p/S/var/DR/IN/m/
 /
READ ALSO
Хранение массивов в Redis

Хранение массивов в Redis

Доброго времени! Хочу спросить совета по поводу хранения данных в redis как это сделать быстрее и оптимальней в плане кода и быстродействия...

468
Выборка из базы и сравнение

Выборка из базы и сравнение

Данный код рисует сетку календаря, календарь рисуется на месяцВыбираются все данные за этот месяц (если есть такие) и при наличии данных в базе...

305
feof() и пустой файл

feof() и пустой файл

Имеется пустой файл (0 байт)Почему feof() не возвращает true?

281
CURL получение содержимого m3u8

CURL получение содержимого m3u8

В общем пишу api для граббинга m3u8, есть функция которая отдает ссылку на файл, ссылка в таком виде

241