Помогите с foreach

Dukuй

Щас сменю себе статус
Регистрация
24 Фев 2009
Сообщения
308
Реакции
190
Имеется текстовый фаил, в котором хранятся данные в следующем виде:
name=fgndfgndfn login=ghbdfgfgb id=12423434 city=sfsdfre

Мне необходимо сделать из него массив для дальнейшей работой с переменными.
Вот мой не рабочий вариант:
PHP:
<?
$lines = file('text.txt');
foreach($lines as $value){
list($var, $val) = explode('=',$value);
$arr[$var] = $val;
}
$name = $arr['name']; 
$login = $arr['login'];
$id = $arr['id']; 

echo $name;
echo $login;  
echo $id;
?>
 
name=fgndfgndfn login=ghbdfgfgb id=12423434 city=sfsdfre

Вот мой не рабочий вариант:
Вам сначала нужно разбить строку на пары "name=fgndfgndfn" и "login=ghbdfgfgb" ... "city=sfsdfre"

То есть сделать еще один foreach с разделителем пробел
 
Не стал полностью эмулировать, упростил для одной строки:
PHP:
$sep=' ';
$arr = array();
$value = "name=fgndfgndfn login=ghbdfgfgb id=12423434 city=sfsdfre";
{
    $_d = explode($sep,$value);
    foreach( $_d AS $_o )
    {
        list($var, $val) = explode('=',$_o);
        $arr[$var] = $val;
    }

}
$name = $arr['name'];
$login = $arr['login'];
$id = $arr['id'];

echo $name;
echo $login;
echo $id;
 
Могу я получать информацию через курл?
PHP:
<?
function my_curl_extend ($my_url, $shtr=0){
$agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;)";
$header = "Accept: text/vnd.wap.wml,*.*";
$ch = curl_init($my_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
//curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$infoStr_content = curl_exec ($ch);
$infoStr = curl_getinfo($ch);
if (!$shtr){
$infoStr ['content'] = $infoStr_content;
}


curl_close ($ch);

return $infoStr;
}
$sep=' ';
$arr = array();
$value = my_curl_extend('http://dreamscity.combats.com/inf.pl?short=1327641470');
{
$_d = explode($sep,$value);
foreach( $_d AS $_o )
{
list($var, $val) = explode('=',$_o);
$arr[$var] = $val;
}

}
$name = $arr['name'];
$login = $arr['login'];
$id = $arr['id'];

echo $name;
echo $login;
echo $id;
?>

Warning: explode() expects parameter 2 to be string, array given in Z:\home\localhost\www\index.php on line 29
PHP:
 $_d = explode($sep,$value);

Warning: Invalid argument supplied for foreach() in Z:\home\localhost\www\index.php on line 30
PHP:
foreach( $_d AS $_o )
 
Эх... нужно было чтобы он САМ осознал как сделать )
Правильный подход, но на форум я написал после суток неудачных попыток и поиска нужного решения. Это как последний вариант :)
 
PHP:
$sep="\n";
$arr = array();
$value = file_get_contents('http://dreamscity.combats.com/inf.pl?short=1327641470');

$_d = explode($sep,$value);
foreach( $_d AS $_o )
{
    list($var, $val) = explode('=',$_o);
    $arr[$var] = $val;
}

$name = $arr['name'];
$login = $arr['login'];
$id = $arr['id'];

echo $name,"<br>";
echo $login,"<br>";
echo $id,"<br>";
Научитесь вардампить...
 
PHP:
foreach($lines as $value){
    if(!$value = trim($value)) continue;
    parse_str(str_replace(" ", "&", $value), $arr);
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
...
Или
PHP:
foreach($lines as $value){
    if(!$value = trim($value)) continue;
    if(!preg_match("/^name=([^\s]+)\s+login=([^\s]+)\s+id=([0-9]+)\s+city=([^\s]+)$/", $value, $match)) continue;
    echo "<pre>";
    print_r($match);
    echo "</pre>";
...
Эх... нужно было чтобы он САМ осознал как сделать )
Если захочет, посмотрит что каждая функция делает.
Во всяком случае я раньше так и делал. Не использовал никакого кода, не поняв как он работает.
Открой урл в браузере и посмотри исходный код. Там совсем в другом формате.
PHP:
function curl_get($url){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
    curl_setopt($ch, CURLOPT_TIMEOUT, 8);
    $res = curl_exec($ch);
    curl_close($ch);
    return $res;
}
if($res = curl_get("http://dreamscity.combats.com/inf.pl?short=1327641470")){
    if(preg_match("/login=([^\s]+).*id=([0-9]+).*name=([^\s]+)/s", $res, $match)){
        unset($match[0]);
        echo "<pre>";
        print_r($match);
        echo "</pre>";
    }
}
 
Последнее редактирование:
f
PHP:
$sep="\n";
$arr = array();
$value = file_get_contents('http://dreamscity.combats.com/inf.pl?short=1327641470');

$_d = explode($sep,$value);
foreach( $_d AS $_o )
{
    list($var, $val) = explode('=',$_o);
    $arr[$var] = $val;
}

$name = $arr['name'];
$login = $arr['login'];
$id = $arr['id'];

echo $name,"<br>";
echo $login,"<br>";
echo $id,"<br>";
Научитесь вардампить...
file_get_contents не вариант, сервер не мой и скорее всего фаерволл блокирует его:
Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен
 
file_get_contents не вариант, сервер не мой
Не вижу разницы, оба работают через 80 порт.
И судя по гуглу проблемы с DNS у не вашего сервера.
cURL, предположительно, тоже не отработает.
 
Назад
Сверху