Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Как преобразовать string в array? / 25 сообщений из 39, страница 1 из 2
22.07.2014, 17:00
    #38703156
Lanuser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
Помогите решить задачку
Есть текстовый файл:

first.name = 'f_test'
first.password = 'f_test_password '
second.name= 's_test_name'
second.password.test = 's_test_test'

Мне нужно чтобы на выходе был массив
$test['first']['name'] => "f_test";
$test['first']['password'] => "f_test_password";
$test['second']['name'] => "s_test_name";
$test['second']['password']['test'] => "s_test_test";


Сделал так, но это всего два уровня

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
function conv ($inarray)
{
	$result = array();
	foreach ($inarray as $fc)
	{
		$n = explode("=", $fc);
		$n[0] = preg_replace('/\s+/', '', $n[0]);
		$n[1] = preg_replace(array('/\s+/', '/["]/', '/[\']/'), '', $n[1]);
		if (strpos($n[0], '.'))
		{
			/*$get = explode('.', $n[0]);
			$check = array_search($result[$get[0]], $result);
			if ($check)
			{
				$result[$get[0]] = array_merge($result[$get[0]], array($get[1] => $n[1]));
			}
			else
			{
				$result[$get[0]] = array($get[1] => $n[1]);
			}*/
			$get = explode('.', $n[0]);
			for($i = 0; $i < count($get); $i++)
			{
				$check = array_search($result[$get[$i]], $result);
				if ($check)
				{
					$result[$get[$i]] = array_merge($result[$get[$i]], array($get[$i+1] => $n[1]));
				}
				else
				{
					if (isset($get[$i+1])) 
					{
						$result[$get[$i]] = array($get[$i+1] => $n[1]);
					}
				}
			}
		}
		else
		{
			$result[$n[0]] = $n[1];
		}
	}
	return $result;
}



ни как не могу понять, как правильно сделать
...
Рейтинг: 0 / 0
22.07.2014, 18:12
    #38703228
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
sscanf
...
Рейтинг: 0 / 0
22.07.2014, 18:36
    #38703251
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
Lanuser,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?php
//for check do request like these ?l1.l2.=1&l1.l22.l3=100&l11.l22.l33=ad&l11.l222.l3=dfjk


function array_add_pathvalue(&$array,$path,$value)
{
	$paths = explode('.',$path);

	$link = &$array;

	while($index = array_shift($paths))
	{
		if(!isset($link[$index]))
		{
			$link[$index] = null;
		}

		$link = &$link[$index];
	}

	$link = $value;
}

$data = array();



foreach(explode('&', getenv('QUERY_STRING')) as $cmd)
{
	list($path,$value) = explode('=', $cmd);

	array_add_pathvalue($data, $path, $value);
}

echo "<pre>";
var_dump($data);
...
Рейтинг: 0 / 0
22.07.2014, 18:40
    #38703253
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
также можно через функции по работе с масивами, но суть серьёзно не измениться, ибо всеравно в глубину ключи надо будет создавать своей строчкой кода. разница лишь в том как зациклиться и как передавать ссылку на уровень ниже...
...
Рейтинг: 0 / 0
22.07.2014, 18:59
    #38703265
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?php


$result = array();
$string = "second.password.test = 's_test_test'";

$keywords = preg_split("#[\.\=]#", $string );
$value = array_pop($keywords );


$str = '$result';
foreach ($keywords as $key):
    $str .= "['$key']";
endforeach;
$str .= "= $value;";

eval($str);

var_dump($result);
...
Рейтинг: 0 / 0
22.07.2014, 19:33
    #38703287
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ScareCrow
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?php


$result = array();
$string = "second.password.test = 's_test_test'";

$keywords = preg_split("#[\.\=]#", $string );
$value = array_pop($keywords );


$str = '$result';
foreach ($keywords as $key):
    $str .= "['$key']";
endforeach;
$str .= "= $value;";

eval($str);

var_dump($result);



это ты любитель говорить - запомните это дети и НИКОГОДА больше так не делайте. ???

:):):)
...
Рейтинг: 0 / 0
22.07.2014, 19:38
    #38703292
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
аргументы будут?
...
Рейтинг: 0 / 0
22.07.2014, 20:58
    #38703313
Lanuser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ScareCrow здорово помогло
...
Рейтинг: 0 / 0
22.07.2014, 21:58
    #38703347
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
LanuserЕсть текстовый файл:

first.name = 'f_test'
first.password = 'f_test_password '
second.name= 's_test_name'
second.password.test = 's_test_test'

Мне нужно чтобы на выходе был массив
$test['first']['name'] => "f_test";
$test['first']['password'] => "f_test_password";
$test['second']['name'] => "s_test_name";
$test['second']['password']['test'] => "s_test_test";


Думаю, тут всё просто, если без проверок.

Иходный файл:
Код: php
1.
2.
3.
4.
5.
$ cat ./text
first.name = 'f_test'
first.password = 'f_test_password '
second.name= 's_test_name'
second.password.test = 's_test_test'



Код:
Код: php
1.
2.
3.
4.
5.
6.
7.
$ cat ./test.php
<?php
foreach(file('text') as $str) {
    $kv = explode('=', $str);
    eval('$test[\'' . str_replace('.', '\'][\'', trim($kv[0])) . '\'] = trim($kv[1]);');
}
var_dump($test);



Результат:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$ php ./test.php
array(2) {
  ["first"]=>
  array(2) {
    ["name"]=>
    string(8) "'f_test'"
    ["password"]=>
    string(18) "'f_test_password '"
  }
  ["second"]=>
  array(2) {
    ["name"]=>
    string(13) "'s_test_name'"
    ["password"]=>
    array(1) {
      ["test"]=>
      string(13) "'s_test_test'"
    }
  }
}
...
Рейтинг: 0 / 0
23.07.2014, 10:14
    #38703578
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ScareCrowаргументы будут?

Стоило бы написать "ты сделал мой день", да вот автор взял код на вооружение, потому аргументы всё же напишу :)

1. Безопасность: eval - это зло... его использовать противопоказано :) Где нить экранирование данных пропустишь - и дырка шириной с ворота (об этом даже начинающие программисты знают).
2. косячность: ну тут всё одной строкой можно описать:
Код: php
1.
$string = "second.password.test = 's.test_test'";
...
Рейтинг: 0 / 0
23.07.2014, 11:22
    #38703674
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
Програмёр

1. Безопасность: eval - это зло... его использовать противопоказано :) Где нить экранирование данных пропустишь - и дырка шириной с ворота (об этом даже начинающие программисты знают).
2. косячность: ну тут всё одной строкой можно описать:
Код: php
1.
$string = "second.password.test = 's.test_test'";



а вот теперь ты сделал мой день.
...
Рейтинг: 0 / 0
23.07.2014, 11:59
    #38703728
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ScareCrowПрограмёр1. Безопасность: eval - это зло... его использовать противопоказано :) Где нить экранирование данных пропустишь - и дырка шириной с ворота (об этом даже начинающие программисты знают).
2. косячность: ну тут всё одной строкой можно описать:
Код: php
1.
$string = "second.password.test = 's.test_test'";



а вот теперь ты сделал мой день.

ты сделал моё утро!

Модератор: ScareCrow, Програмёр , настоятельно прошу прекратить употреблять фразы вроде "ты сделал мое <время суток>" без каких-либо комментариев по существу вопроса. Вы находитесь на профессиональном форуме, а не в личном блоге, где можете делиться с аудиторией радостями и восторгами от увиденного кода. Обещаю на следующем подобном посте нажать кнопку "Забанить", а если это не поможет - поставлю еще галку "Постоянный бан". ScareCrow, Вам я уже делал ранее подобные замечания, но Вы их почему-то игнорируете. Считайте это последним китайским предупреждением.
--
vkle
...
Рейтинг: 0 / 0
23.07.2014, 12:40
    #38703779
Lanuser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ПрограмёрScareCrowпропущено...


а вот теперь ты сделал мой день.

ты сделал моё утро!

OK, без eval мб вы сможете мне помочь?
...
Рейтинг: 0 / 0
23.07.2014, 13:02
    #38703817
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
Програмёр1. Безопасность: eval - это зло... его использовать противопоказано :) Где нить экранирование данных пропустишь - и дырка шириной с ворота (об этом даже начинающие программисты знают).Считаю, что таким набором аргументов "злом" eval() может стать только для начинающих программистов. Опытный же программист в любом случае сделает необходимые проверки. Разумеется, в каких-то случаях проверки входных данных могут быть достаточно простыми, а в каких-то могут потребовать определенных усилий.

При Ваших же аргументах "злом" можно считать использование массивов $_POST, $_GET, да и вообще, любое получение данных извне - ведь везде можно "забыть" сделать проверку/обработку данных.
...
Рейтинг: 0 / 0
23.07.2014, 13:47
    #38703878
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
LanuserПрограмёрпропущено...


ты сделал моё утро!

OK, без eval мб вы сможете мне помочь?
не сможет. нельзя в php по очереди ключи без значений в массив добавлять
...
Рейтинг: 0 / 0
23.07.2014, 13:53
    #38703890
Lanuser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ScareCrow,

OK,
а если есть такой массив:
'firs.name' => "f_test";
'first.password' => "f_test_password";

Как разобрать ключ на ключи с учетом разделителя?
...
Рейтинг: 0 / 0
23.07.2014, 14:27
    #38703930
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
LanuserПрограмёрпропущено...


ты сделал моё утро!

OK, без eval мб вы сможете мне помочь?

с eval делать можно (хотя как я и говорил, не желательно). Основным был последний аргумент, что при изменении входных данных получаем глюк (если в значении случайно встретятся знаки "." или "=").

предлагаю взять вариант vkle, только во избежания косяка с "=" (у него он тоже будет, хотя с точкой всё ок), у explode добавить третий аргумент 2 (ну то есть установить лимит) :)

без eval сделать можно, просто немного сложнее.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   $res = array();
   $ftext = explode("\n", "first.name = 'f_test'
first.password = 'f_test_password '
second.name= 's_test_name'
second.password.test = 's_test_test'");
   foreach($ftext as $str){
    $val = explode("=", $str, 2);
    $arr = explode(".", $val[0]);
    $link = &$res;
    foreach($arr as $key){
      $key = trim($key);
      if(!isset($link[$key])) $link[$key]=array();
      $link = &$link[$key];
    }
    $link = trim($val[1]);
   }
var_dump($res);



Вот ) Если нигде не ошибся :)
...
Рейтинг: 0 / 0
23.07.2014, 14:31
    #38703934
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
это правда вы утром говорили об опасности eval?

вам не кажется что вот такие хаки гораздо опасней?
...
Рейтинг: 0 / 0
23.07.2014, 14:35
    #38703941
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
авторarray(2) {
["first"]=>
array(2) {
["name"]=>
string(8) "'f_test'"
["password"]=>
string(18) "'f_test_password '"
}
["second"]=>
array(2) {
["name"]=>
string(13) "'s_test_name'"
["password"]=>
array(1) {
["test"]=>
&string(13) "'s_test_test'"
}
}
}


кстати работает неправильно.
...
Рейтинг: 0 / 0
23.07.2014, 14:35
    #38703942
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
и во избежание косяков при неоднозначном вводе (типа "password = '10'\npassword.test='12'") стоит наверное добавить после:
Код: php
1.
if(!isset($link[$key])) $link[$key]=array();


ещё строку
Код: php
1.
if(!is_array($link[$key])) $link[$key]=array($link[$key]);



в таком случае получим это значение "по-умолчанию" в нулевом элементе. Ну то есть код выше вернёт массив array("password"=>array(0=>"'10'", "test"=>"'12'"))
...
Рейтинг: 0 / 0
23.07.2014, 14:35
    #38703943
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
array(2) {
  ["first"]=>
  array(2) {
    ["name"]=>
    string(8) "'f_test'"
    ["password"]=>
    string(18) "'f_test_password '"
  }
  ["second"]=>
  array(2) {
    ["name"]=>
    string(13) "'s_test_name'"
    ["password"]=>
    array(1) {
      ["test"]=>
      &string(13) "'s_test_test'"
    }
  }
}
...
Рейтинг: 0 / 0
23.07.2014, 14:38
    #38703949
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ScareCrowэто правда вы утром говорили об опасности eval?

вам не кажется что вот такие хаки гораздо опасней?

Работа по указателю (или в php это вроде правильно называется по ссылке, так как я могу только сослаться на переменную, а не обратиться по указанному адресу) - не хак :)
Только тут никто никуда влезть не сможет.
...
Рейтинг: 0 / 0
23.07.2014, 14:39
    #38703950
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
ScareCrow
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
array(2) {
  ["first"]=>
  array(2) {
    ["name"]=>
    string(8) "'f_test'"
    ["password"]=>
    string(18) "'f_test_password '"
  }
  ["second"]=>
  array(2) {
    ["name"]=>
    string(13) "'s_test_name'"
    ["password"]=>
    array(1) {
      ["test"]=>
      &string(13) "'s_test_test'"
    }
  }
}



а как должно быть?
...
Рейтинг: 0 / 0
23.07.2014, 14:39
    #38703951
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
авторМне нужно чтобы на выходе был массив
$test['first']['name'] => "f_test";
$test['first']['password'] => "f_test_password";
$test['second']['name'] => "s_test_name";
$test['second']['password']['test'] => "s_test_test";
...
Рейтинг: 0 / 0
23.07.2014, 14:46
    #38703962
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Как преобразовать string в array?
а, не, правильно. мой косяк.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Как преобразовать string в array? / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]