|
|
|
| Добрый день.
Подскажите, можно ли как-нибудь в php из строки вида
"a=b
c=d
e=f"
получить массив
"a"="b"
"c"="d"
"e"="f"
Пока додумался только до двух массивов - один с ключами, другой со значениями... | |
|
|
|
|
|
|
|
для: azEsm
(17.01.2014 в 10:12)
| | в РНР есть функция explode()
она может помочь, при условии, что формат строки не меняется
лучше конечно когда строка не содержит "переходов строки", просто эти спец знаки различны для разных операционных систем
__
расскажите откуда берётся строка и почему она именно в таком виде? | |
|
|
|
|
|
|
|
для: Valick
(17.01.2014 в 10:16)
| | explode("=", "a=b") выдаёт "[1]=>a [2]=>b", а мне желательно, чтобы было "a"="b" | |
|
|
|
|
|
|
|
для: azEsm
(17.01.2014 в 10:42)
| | :)
$e = explode("=", "a=b");
$arr[$e[1]]=$e[2];
|
___
ответьте на мой вопрос, возможно имеется более правильное решение | |
|
|
|
|
|
|
|
для: Valick
(17.01.2014 в 10:52)
| | Спасибо! Это как раз то, что нужно. Затупорылил :)
Только там $arr[$e[0]=$e[1]; | |
|
|
|
|
|
|
|
для: Valick
(17.01.2014 в 10:52)
| | А не в курсе, случаем, почему такая проверка не работает
$a = explode("=", $array[$i]);
if(!empty($a[0]))
{
$data[$a[0]]=$a[1];
}
а работает только if(!empty($a[1]))? Даже если строка пустая, всё равно в первом случае в массив пишется "[]=>" | |
|
|
|
|
|
|
|
для: azEsm
(17.01.2014 в 12:01)
| | если там ноль или пусто, то это empty
___
вы упорно не хотите отвечать на мой вопрос, а зря | |
|
|
|
|
|
|
|
для: Valick
(17.01.2014 в 12:35)
| | Это понятно, просто когда проверяю по a[0] , то даже если она пустая ($array[$i] вообще пустая строка), выражение всё равно выполняется, а если проверяю по a[1], то не выполняется, работает, как задумано.
Но мне крайне желательно проверять именно по a[0]. | |
|
|
|
|
|
|
|
для: azEsm
(17.01.2014 в 12:43)
| | Проверять что и после чего? | |
|
|
|
|
|
|
|
для: azEsm
(17.01.2014 в 12:43)
| | а мне уже жутко желательно чтобы вы ответили на мой вопрос в моем первом посте:
"откуда берется эта строка и почему она именно в таком виде"
Я же должен хотя бы смутно представлять что вы там вообще творите.
От этого зависит качество и оперативность оптимально правильного ответа. | |
|
|
|
|
|
|
|
для: Valick
(17.01.2014 в 12:48)
| | Вообще, она берётся из файла, в котором записаны параметры в виде
a=b
d=j
d=y
и т.п. Это я всё уже сделал, осталось проверку на пустые строки делать. Вот вся функция целиком:
function readprop($filename)
{
$handler = fopen($filename, "r");
while(!feof($handler))
{
$array[]=fgets($handler);
}
for($i=0; $i<count($array); $i++)
{
$a = explode("=", $array[$i]);
if(!empty($a[1]) && $a[0]{0}!="#")
{
$data[$a[0]]=$a[1];
}
}
return $data;
}
|
if(!empty($a[1]) && $a[0]{0}!="#") проверяет, не закомментирована ли строка и заполнена ли она. Но проверяет по второму элементу, а желательно проверять первый элемент. Если сделать if(!empty($a[0])), то даже если строка пустая, она всё равно пишется в $data в виде "[]=>". | |
|
|
|
|
|
|
|
для: azEsm
(17.01.2014 в 13:07)
| | Начните с file(), это сразу вернет массив, а fopen тут не нужна.
Explode в любом случае вернет массив, и если ожидается, что по разбиению должно быть два элемента в нем, то нужно проверять количество элементов, а не "пустоту". ПО условию проверки принимать действия. Если необходимо удаление пустых элементов, то их надо просто удалять, без всяких if(!empty($a[1]) и прочего. | |
|
|
|
|
|
|
|
для: azEsm
(17.01.2014 в 13:07)
| | 1) Вы читаете файл целиком в массив, в этом нет смысла применять fgets
проще как сказал confirm использовать file()
2) я так понимаю файл не ваш, и у вас нет возможности структурировать его более детально без всяких пустых строк и тд.
Покажите кусок файла с реальными данными
По хорошему конечно читать файл посимвольно | |
|
|
|
|
|
|
|
для: Valick
(17.01.2014 в 14:32)
| | > в этом нет смысла
если конечно файл не 100 гигов....
А, не, пардон.
Не досмотрел, что вся обработка происходит уже после чтения.
Так конечно да. | |
|
|
|