[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: explode() для трех массивов
Страницы: 1, 2
kav1
Доброго времени суток, достопочтенная публика.

Вот для того, чтобы строку вида
$a  = "1|2|3|4|5|6";
разбить на массив, нужно сделать всего лишь
$massive = explode("|", $a);


А у меня строка вида
$b  = "1|2!3¦4|5!6¦";


В это строке (число элементов в ней кратно трем и заранее неизвестно) три разных разделителя, мне надо в итоге из такой строки получить три массива/

Для вышеуказанного примера:
$massive1 будет содержать 1 и 4
$massive2 будет содержать 2 и 5
$massive3 будет содержать 3 и 6

Как это можно сделать с помощью explode(), ну и либо еще какой-нибудь щтуки?
kaww
$a = "1|2!3¦4|5!6¦";
preg_match_all("/(\d+)\|(\d+)\!(\d+)\¦/", $a, $m);
var_dump($m[1], $m[2], $m[3]);
twin
Цитата (mav1 @ 15.02.2016 - 21:24)
ну и либо еще какой-нибудь щтуки?

Эта щтука называется "сериализация" по идее.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
kav1
Цитата (kaww @ 16.02.2016 - 01:50)
$a = "1|2!3¦4|5!6¦";
preg_match_all("/(\d+)\|(\d+)\!(\d+)\¦/", $a, $m);
var_dump($m[1], $m[2], $m[3]);

Спасибо, помогло, осталась одна проблема - у меня 1,4,7 и т.д. элементы это не только цифры но и буквы, в том числе кириллица.

Вариант

preg_match_all("/([a-zA-ZА-Яа-Я0-9]+)\|(\d+)\!(\d+)\¦/"", $a, $m);
var_dump(
$m[1], $m[2], $m[3]);


ведет себя странно - все строки, где есть кириллица, обрезаются непонятным образом (прочел сейчас, что preg_match_all работает только с однобайтовыми кодировками). Латиница - нормально, кириллица - обрезается по всякому, видимо потому что в utf-8 кириллица неоднобайтовая.

Как можно сие починить? Пробовал добавить /u в регулярку - непрокатило
Valick
Цитата (mav1 @ 16.02.2016 - 12:28)
Как можно сие починить?

просто не надо создавать себе проблемы, и потом не придётся их героически преодолевать...
Цитата (mav1 @ 16.02.2016 - 00:24)

А у меня строка вида

$b  = "1|2!3¦4|5!6¦";

откуда у вас такая строка на кой керн столько разделителей красивых и разных???


_____________
Стимулятор ~yoomoney - 41001303250491
kav1
Цитата (Valick @ 16.02.2016 - 09:46)
Цитата (mav1 @ 16.02.2016 - 12:28)
Как можно сие починить?

просто не надо создавать себе проблемы, и потом не придётся их героически преодолевать...
Цитата (mav1 @ 16.02.2016 - 00:24)

А у меня строка вида

$b  = "1|2!3¦4|5!6¦";

откуда у вас такая строка на кой керн столько разделителей красивых и разных???

Тут, к сожалению, я не могу вам ответить - я допиливаю уже то, что попало в мои руки. То есть вот оно есть в таком виде, и с этим надо что-то делать...
Valick
Цитата (mav1 @ 16.02.2016 - 13:56)
Тут, к сожалению, я не могу вам ответить

Вы вообще отдаёте отчёт своим словам? Вас не волнуют ошибки допущенные предыдущим "программистом", и вы собираетесь еще тонны своих нагородить, вместо того что бы исправить незначительную часть в самом начале?

_____________
Стимулятор ~yoomoney - 41001303250491
kav1
Цитата (Valick @ 16.02.2016 - 11:02)
Цитата (mav1 @ 16.02.2016 - 13:56)
Тут, к сожалению, я не могу вам ответить

Вы вообще отдаёте отчёт своим словам? Вас не волнуют ошибки допущенные предыдущим "программистом", и вы собираетесь еще тонны своих нагородить, вместо того что бы исправить незначительную часть в самом начале?

К сожалению, все базы уже в этом виде. И будут тоже в этом виде поступать в мои руки..
waldicom
Цитата (Valick @ 16.02.2016 - 12:02)
Вас не волнуют ошибки допущенные предыдущим "программистом", и вы собираетесь еще тонны своих нагородить, вместо того что бы исправить незначительную часть в самом начале?

Э, не надо тарапицца, не надо тарапицца (с) товарищ Саахов
Он ща исправит "в самом начале", а потом вест проект упадет, потому что другие работают с данными в этом формате. Или еще хуже - упадет не весь проект, а только какая-то маленькая часть. И потом иписьсней.

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
kav1
Цитата (waldicom @ 16.02.2016 - 11:25)
потому что другие работают с данными в этом формате.

вот так оно и есть...
Valick
waldicom, ну во первых, об этом стоило написать сразу после моего вопроса, а во вторых, если эти другие - 2 человека, то сильно сомневаюсь в остальном...

mav1, вы хотите сказать, что полтора миллиарда китайцев, записывают руками данные именно в этом формате? тогда да, я не прав, погорячился, сори... трудно будет каждому объяснить как надо (хотя предыдущему программисту это удалось)

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

_____________
Стимулятор ~yoomoney - 41001303250491
kav1
Цитата (Valick @ 16.02.2016 - 11:46)
mav1, вы хотите сказать, что полтора миллиарда китайцев, записывают руками данные именно в этом формате? тогда да, я не прав, погорячился, сори... трудно будет каждому объяснить как надо (хотя предыдущему программисту это удалось)

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

Ни в коем случае не держу на вас никакой обиды, вы предложили свое решение, высказали свое мнение - на то и форум. Я благодарен за любой совет! Формат базы менять не могу(
icedfox
preg_match_all("/([a-zA-ZА-Яа-Я0-9]+)\|(\d+)\!(\d+)\¦/ui", $a, $m);
casper - gg
Цитата (mav1 @ 16.02.2016 - 15:52)
на то и форум


мне просто из любопытства, Mav на форуме Вы более 5 лет, хотя и сообщений не много в профиле. Но все же не ясно отчего такие трудности возникают в вопросах начальных практически. Много ли такой практикой занимались, какие успехи сейчас с этим проектом. Ведь там вопрос - равносильно чашку чая выпить.
FatCat
Не люблю регулярки. Посимвольный перебор будет работать не медленнее, и плевать на кодировки.
$b  = "1|2!3¦4|5!6¦";
$m1 = array();
$m2 = array();
$m3 = array();
$tmp = "";
for($i=0;$i<strlen($b);$i++)
{
if($b[$i] == '|')
{
$m1[] = $tmp;
$tmp = "";
}
elseif($b[$i] == '!')
{
$m2[] = $tmp;
$tmp = "";
}
elseif($b[$i] == '¦')
{
$m3[] = $tmp;
$tmp = "";
}
else $tmp .= $b[$i];
}


_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.