Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Преобразовать строку в массив
 
 автор: ДаньЧег   (04.01.2009 в 10:13)   письмо автору
 
 

Я хотел спросить а можно ли функцией explode записывать получаемые значения в массив?! То есть если у меня есть текст
user1/1234;user/4321;....../.....
И мне нада записать каждое полученное значение в соответствуюший ей массив.
Например я первым эксплодом розобью строку символом ;(точка с запятой) авсе это пишется в массив(причем я тама получаю X значений),а вторым разобью символом / (левый слеш), и выведу в два массива (напр $user_name и $user_pass).
Это в принципе достижимо?! И если нет то каким способом можно достьчь подобного?!

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 10:32)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 10:13)
 

Если используются несколько разделителей, уместнее наверное использовать preg_match_all()

  Ответить  
 
 автор: ДаньЧег   (04.01.2009 в 16:55)   письмо автору
 
   для: Николай2357   (04.01.2009 в 10:32)
 

Не! Думаю не подходит!
А может разделить все это SPLITом?! Я пробовал им, но через foreach он пишет "Invalid argument supplied for foreach()"( Типа Несостоятельный довод :)), через echo пишет только первое значение.
Опредили тип, оказалось что это не массив а string!(хотя в документации четко написанно что СПЛИТ записывает именно в массив!)

  Ответить  
 
 автор: Trianon   (04.01.2009 в 17:00)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 16:55)
 

Никогда split() не возвращала массив. Где Вы отрыли такую документацию?
Дело, собственно, не в том какой функцией резать, а в том, что именно в строке держать.
Собственно, если хранить не сами пароли, а их кодированные значения ( а проще тогда уж - кодированные значения хешей) - explode вполне себе прокатывает.

  Ответить  
 
 автор: ДаньЧег   (04.01.2009 в 17:08)   письмо автору
 
   для: Trianon   (04.01.2009 в 17:00)
 

>>Никогда split() не возвращала массив. Где Вы отрыли такую документацию?
split - делает из строки массив с помощью регулярного выражения.
Вот ссылка!
Или я их просто неправильно понял!
Но у меня есть пример гостевой книги,(писал собсна не я!) там тоже дата, имя, и сам комент брались из файла! Разделялось все темже сплитом. А выводилось обычным echo без [''].

  Ответить  
 
 автор: Trianon   (04.01.2009 в 17:23)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 17:08)
 

Это я сморозил.
Вероятно, Вы перепутали параметры, и split() вернула false. false - всяко не массив.
Вообще, стоит учитывать, что split() разбивает строку по шаблону регулярного выражения, а не просто так.

  Ответить  
 
 автор: ДаньЧег   (04.01.2009 в 17:34)   письмо автору
 
   для: Trianon   (04.01.2009 в 17:23)
 

А точн!
Я совсем забыл что нада по всему тексту сначала пройтись!
Перед сплитом нада добавить for($i=0;$i<=count($содеожашая текст)-1;$i++) и к разбиваемой переменной в настр эксплода нада добавить ['i']!))

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 18:16)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 17:34)
 

А чем Вам preg_match_all() не угодила?
<?php 
$a 
"user/1234;user1/4321;user2/3421";
preg_match_all("#;*([^/]+)/([^;]+)#s",$a,$out);
print_r($out[1]);
print_r($out[2]);

  Ответить  
 
 автор: ДаньЧег   (04.01.2009 в 19:04)   письмо автору
 
   для: Николай2357   (04.01.2009 в 18:16)
 

Кстати тоже нилохо!
Я нимного изменил код
<?php  
$a 
"user/1234;user1/4321;user2/3421"
preg_match_all("#;*([^/]+)/([^;]+)#s",$a,$out); 
echo 
"Users:<br>";
foreach(
$out[1] as $out1){
    echo 
"$out1  ";
}
echo 
"<br><br>";
echo 
"PASS:<br>";
foreach(
$out[2] as $out1){
    echo 
"$out1   ";
}
?>

Вот что получил на выходе:
Users:
user; user1; user2;

PASS:
1234; 4321; 3421;



ЗЫ: не юзал preg_match_all тк не особо понимаю принцип использования.Документацию читал! Мне не помогло!

  Ответить  
 
 автор: ДаньЧег   (04.01.2009 в 19:20)   письмо автору
 
   для: Николай2357   (04.01.2009 в 18:16)
 

У меня не получилось СПЛИТОМ сделать нечто подобное preg_match_all(), ведь при использовании этого самого сплита нужно посчитать на скока частей делить....таким макаром, что когда функция for находит / выполняет условие: добовляет к определенной переменной одну единицу, и отделяет первые символы до введенного кхе! символа. Дальше это все повторяется, пока for находит введенный символ.....но чето тут не так.....

  Ответить  
 
 автор: ДаньЧег   (04.01.2009 в 21:56)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 19:20)
 

Почемуто сплит после разделителя кушает все остальную строку!И из за этого на выходе только логин!Но не пасс....

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 22:01)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 21:56)
 

Это из спортивного интереса или что то не подходит из моего варианта?

  Ответить  
 
 автор: ДаньЧег   (05.01.2009 в 07:53)   письмо автору
 
   для: Николай2357   (04.01.2009 в 22:01)
 

В действительности только твой вариант и работает! Чтоб сделать мне своим способом нужно знать функцию переноса строки...

  Ответить  
 
 автор: duhon   (17.01.2014 в 12:54)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 19:20)
 

чисто философски попробовал сплитом
<?php $res preg_split('#([^/]+)/([^;]+);#''usr1/pass1;usr2/pass2;usr3root/xxx;', -1PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE);
print_r($res);
/*Array
(
    [0] => usr1
    [1] => pass1
    [2] => usr2
    [3] => pass2
    [4] => usr3root
    [5] => xxx
)*/

  Ответить  
 
 автор: azEsm   (17.01.2014 в 10:01)   письмо автору
 
   для: Николай2357   (04.01.2009 в 18:16)
 

А можно как-нибудь получить из этой строки массив

"user"="1234"
"user1"="4321"
"user"="3421"

  Ответить  
 
 автор: Trianon   (04.01.2009 в 10:34)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 10:13)
 

в принципе - можно.
В данном случае - нет. Поскольку тем самым Вы из символов пароля исключите знаки / и ;

  Ответить  
 
 автор: Frankey   (04.01.2009 в 10:37)   письмо автору
 
   для: ДаньЧег   (04.01.2009 в 10:13)
 

Аффтар, как насчёт цикла foreach?

Если $array1 - это массив с теми самыми Х значений внутри.
foreach($array1 as $ind => $value)
{
$razd = explode("/",$value); // Разделяем логин и пароль
$user_name[$ind] = $razd[0]; // Помещаем логин в один массив
$user_pass[$ind] = $razd[1]; // Пароль в другой
}

Как-то так. (Если я тебя правильно понял)
ЗЫ: Но я не профессионал.
ЗЗЫ: И это если в паролях нет знаков ; и /, хотя в примере в твоём посте всё кайф. =)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования