Как вернуть массив из функции - PullRequest
0 голосов
/ 13 марта 2012

У меня есть функция, которая должна возвращать массив.Но это не работает.Когда я пытаюсь print_r ничего не возвращается.Странно то, что если я помещаю print_r в функцию непосредственно перед возвратом, он возвращает массив правильно.Надеюсь, кто-то может помочь.Заранее благодарю за ваши ответы.Приветствия.Марк.

$url = "http://www.somesite.com";
$path ="somexpath";
$print = print_url_data($url, $path);
print_r($print);

  function print_url_data($url, $path)
{
     $content = get_url_data($url, $path);
     foreach ($content as $value)
     {
          $output .= $value->nodeValue . "<br />";
     }
     return $output;
}

function get_url_data($url, $path)
{
     $xml_content = get_url($url);
     $dom = new DOMDocument();
     @$dom->loadHTML($xml_content);
     $xpath = new DomXPath($dom);
     $content_title = $xpath->query($path);
     $tableau = array();
     foreach ($content_title as $node) 
        array_push($tableau, utf8_decode(urldecode($node->nodeValue)));


     return $tableau; //What is being returned to the function call
}

function get_url($url)
{
  $curl = curl_init();

  // Setup headers - I used the same headers from Firefox version 2.0.0.6
  // below was split up because php.net said the line was too long. :/
  $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
  $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
  $header[] = "Cache-Control: max-age=0";
  $header[] = "Connection: keep-alive";
  $header[] = "Keep-Alive: 300";
  $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  $header[] = "Accept-Language: en-us,en;q=0.5";
  $header[] = "Pragma: "; // browsers keep this blank.

  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');
  curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  curl_setopt($curl, CURLOPT_REFERER, '[url=http://www.google.com]http://www.google.com[/url]');
  curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
  curl_setopt($curl, CURLOPT_AUTOREFERER, true);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_TIMEOUT, 10);

  $html = curl_exec($curl); // execute the curl command
  curl_close($curl); // close the connection

  return $html; // and finally, return $html
}

Ответы [ 3 ]

0 голосов
/ 13 марта 2012

Изменить: С учетом нового кода, который вы опубликовали, измените:

$output .= $value->nodeValue . "<br />";

на

$output .= $value . "<br />";

Это работает для меня, если вы хотитемне разместить ссылку на тестовый скрипт на моем сервере.(Вы ссылались на $ content как на объект, но это было объявлено как массив:])


Если с помощью $ node-> nodeValue вы анализируете xml;У меня была похожая проблема с этим некоторое время назад.Я обнаружил, что явное приведение значения узла к строке при добавлении его в массив решило мою проблему.

Я полагаю, что это возможно, потому что ссылка на объект xml добавляется в массив вместо строки;как только ваша функция заканчивается, объект xml уничтожается и данные больше не доступны.Надеюсь, это поможет:)

Пример:

array_push($tableau, (String) utf8_decode(urldecode($node->nodeValue)));
0 голосов
/ 13 марта 2012

Извините, моя ошибка. Я неуместно конструкция массива. Здесь ниже код, который работает для тех, кто заинтересован. Спасибо всем, что заняло время, пытаясь помочь мне. Приветствия.

<?php

$url = "http://www.somesite.com";
$path = "somexpath";
print_r(print_url_data($url, $path));

///////////////////////////////////


function print_url_data($url, $path)
{
     $content = get_url_data($url, $path);
     $tableau = array();
     foreach ($content as $value)
     {
            array_push($tableau, $value->nodeValue);

     }
     return $tableau;
}



function get_url_data($url, $path)
{
     $xml_content = get_url($url);
     $dom = new DOMDocument();
     @$dom->loadHTML($xml_content);
     $xpath = new DomXPath($dom);
     $content_title = $xpath->query($path);
     return $content_title;
}



function get_url($url)
{
  $curl = curl_init();

  // Setup headers - I used the same headers from Firefox version 2.0.0.6
  // below was split up because php.net said the line was too long. :/
  $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
  $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
  $header[] = "Cache-Control: max-age=0";
  $header[] = "Connection: keep-alive";
  $header[] = "Keep-Alive: 300";
  $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  $header[] = "Accept-Language: en-us,en;q=0.5";
  $header[] = "Pragma: "; // browsers keep this blank.

  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');
  curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  curl_setopt($curl, CURLOPT_REFERER, '[url=http://www.google.com]http://www.google.com[/url]');
  curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
  curl_setopt($curl, CURLOPT_AUTOREFERER, true);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_TIMEOUT, 10);

  $html = curl_exec($curl); // execute the curl command
  curl_close($curl); // close the connection

  return $html; // and finally, return $html
}
0 голосов
/ 13 марта 2012

Убедитесь, что в файле php.ini включены ошибки и предупреждения. Это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...