Разбить строку в php формата: 4044_90548_9079

313
14 января 2017, 14:53

Подскажите, как разбить строку формата: 4044_90548_90791, чтобы в итоге получилось: array(4044, 4044_9054, 4044_90548_90791);

Answer 1
<?php
$string = "4044_90548_90791";
// Вариант для строки с 3 элементами
$result = preg_replace("/^(\d+)\_(\d+)\_(\d+)$/", "$1,$1_$2,$1_$2_$3", $string);
$resultArray = explode(',', $result);
print_r($resultArray);
/**
Array
(
    [0] => 4044
    [1] => 4044_90548
    [2] => 4044_90548_90791
)
**/

// Вариант для строки с любым количеством элементов
$array = explode('_', $string);
$resultArray = [];
foreach ($array as $item) {
    $resultArray[] = empty($resultArray) ? $item : end($resultArray) . '_' . $item;
}
print_r($resultArray);
/**
Array
(
    [0] => 4044
    [1] => 4044_90548
    [2] => 4044_90548_90791
)
*/
Answer 2

Всё оказалось просто:

$categories = explode('_', '4044_90548_90791');
$explode = array();
$add = '';
$i = 0;
while ($i <= count($categories)-1) {
    $explode[$i] = $add.$categories[$i];
    $add .= $categories[$i].'_';
    $i++;
}
Answer 3

Альтернативный вариант:

$s = '4044_90548_90791';
$l = strlen($s);
$a = [];
for ($i = 0; $i < $l; $i++) {
    if ($s[$i] === '_' || $i === $l - 1) {
        $a[] = substr($s, 0, $i);
    }
}

Нужно только отметить, что он не будет работать с мультибайтовыми кодировками (для этого нужно будет заменить строковые функции на mb_* аналоги).

Answer 4

И еще один вариант)

$path = '4044_90548_90791';
$path = explode('_', $path);
for ($i = 1; $i < count($path); $i++) {
    $path[$i] = $path[$i-1] . '_' . path[$i];
}
print_r($path);
Answer 5

еще вариант со строковыми функциями:

$result = [];
$pos = 0;
while( ($pos = strpos($str, "_", $pos+1)) !== false){
    $result[] = substr($str, 0, $pos);
};
$result[] = $str;
Answer 6
$res = explode("_", "4044_90548_90791");
$res[count($res) - 1] = "4044_90548_90791";
for($j = 1; $j < count($res) - 1; $j++)
    {
        $res[$j] = $res[0] ."_". $res[$j];
    } 
print_r($res);
READ ALSO
Не могу понять как вообще практиковать php [требует правки]

Не могу понять как вообще практиковать php [требует правки]

Изучаю php, читаю книги и нигде не могу найти как найти сервер? Где писать то? Где все пишут? Сервера дорогие

352
NGINX + Php-Fpm - No input file specified

NGINX + Php-Fpm - No input file specified

не могу запустить сайт на локалкеизобрадения видит, а php-файлы не хочет обрабатывать

401
как в phpunit через метод call() отправить заголовки?

как в phpunit через метод call() отправить заголовки?

Передаю через call() файл, как передать заголовки?

325