Подскажите, как разбить строку формата: 4044_90548_90791, чтобы в итоге получилось: array(4044, 4044_9054, 4044_90548_90791);
<?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
)
*/
Всё оказалось просто:
$categories = explode('_', '4044_90548_90791');
$explode = array();
$add = '';
$i = 0;
while ($i <= count($categories)-1) {
$explode[$i] = $add.$categories[$i];
$add .= $categories[$i].'_';
$i++;
}
Альтернативный вариант:
$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_* аналоги).
И еще один вариант)
$path = '4044_90548_90791';
$path = explode('_', $path);
for ($i = 1; $i < count($path); $i++) {
$path[$i] = $path[$i-1] . '_' . path[$i];
}
print_r($path);
еще вариант со строковыми функциями:
$result = [];
$pos = 0;
while( ($pos = strpos($str, "_", $pos+1)) !== false){
$result[] = substr($str, 0, $pos);
};
$result[] = $str;
$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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Изучаю php, читаю книги и нигде не могу найти как найти сервер? Где писать то? Где все пишут? Сервера дорогие
не могу запустить сайт на локалкеизобрадения видит, а php-файлы не хочет обрабатывать
Передаю через call() файл, как передать заголовки?