За последние 24 часа нас посетили 49699 программистов и 1731 робот. Сейчас ищут 596 программистов ...

Как из var_dump получить определенное значение

Тема в разделе "PHP для новичков", создана пользователем servitpol, 17 авг 2016.

  1. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    День добрый! У меня такая проблема, помогите решить пожалуйста: есть api от megaindex.com https://ru.megaindex.com/api/catalog/view/1 (примеры на github https://github.com/megaindexcom/MegaIndex.com-API) мне нужно вытянуть обратные ссылки сайтов конкурентов. Я рисую такую конструкцию:
    PHP:
    1. <?php
    2. if(isset($_POST['links'])) {
    3. include_once 'megaindex.php';
    4. $key = 'свой апи';
    5. $mi = new MegaIndex($key);
    6.  
    7. echo '<h1>Back links</h1>';
    8. $param = array('domain' => $_POST['your_url'], 'count' => 1, 'link_per_domain' => 1);
    9. $array = $mi->get('backlinks', $param);
    10. var_dump($array);
    11. }
    12. ?>
    Файл megaindex.php взят с github по ссылке выше.
    В $_POST['your_url'] отдаю значение через форму <input type="text" name="your_url" /> из html страницы.

    на выходе получаю:
    Код (Text):
    1. array(3) {
    2.     ["status"] => int(1)["data"] => array(1) {
    3.         [0] => array(16) {
    4.             ["domain_from"] => string(20)
    5.             "В«www.1ovep1anet.ru/" ["domain_to"] => string(44)
    6.             "google.com/chrome/browser/desktop/index.html" ["link_text"] => string(28)
    7.             "Скачать Google Chrome" ["nofollow"] => int(1)["noindex"] => int(0)["exlinks"] => int(21)["redirect"] => int(0)["count"] => int(63)["tic"] => int(0)["link_rank"] => int(0)["domain_rank"] => int(0)["level_from"] => int(0)["ip"] => string(13)
    8.             "8.185.134.204" ["add"] => string(10)
    9.             "2015-09-09" ["check"] => string(10)
    10.             "2016-08-15" ["del"] => string(0)
    11.             ""
    12.         }
    13.     }["request_time"] => float(9.103)
    14. }
    Мне нужна только пятая строка
    Код (Text):
    1. "В«www.1ovep1anet.ru/" ["domain_to"] => string(44).
    Как на выходе получить только ее??Подскажите пожалуйста. Перепробовал уже кучу вариантов, спалил кучу денег на запросы к api но результата пока ноль...

    P/S Ребят, я неделю назад впервые взял в руки книжку по JavaScript, а вчера можно сказать впервые столкнулся с php (не считая каждодневной правки wordpress шаблонов). Работаю seo-шником, но немного кодить умею. Возможно как-то неправильно сформулировал вопрос, если что извиняйте!)
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Очевидно, что $array["status"][0]['domain_from']. Почитай просто про массивы и var_dump.
     
  3. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    var_dump($array["status"][0]['domain_from']); вот такая конструкция не работает((Или я не так что-то делаю?Про var_dump читал, гугл меня уже за формулировку запросов тихо ненавидит, но решение не нахожу(((
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    не работает - это не понятно. Понятно: выдаёт вот такой мат. А вообще, приведи исходный массив не в var_dump, а в var_export, чтоб можно было скопировать к себе и попробовать.
     
    denis01 нравится это.
  5. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Если получать данные через var_export($array); выдает:
    Код (Text):
    1. array ( 'status' => 1, 'data' => array ( 0 => array ( 'domain_from' => '«www.1ovep1anet.ru/', 'domain_to' => 'google.com/chrome/browser/desktop/index.html', 'link_text' => 'Скачать Google Chrome', 'nofollow' => 1, 'noindex' => 0, 'exlinks' => 21, 'redirect' => 0, 'count' => 63, 'tic' => 0, 'link_rank' => 0, 'domain_rank' => 0, 'level_from' => 0, 'ip' => '8.185.134.204', 'add' => '2015-09-09', 'check' => '2016-08-15', 'del' => '', ), ), 'request_time' => 6.82800000000000029132252166164107620716094970703125, )
    если через var_dump($array["status"][0]['domain_from']); или var_export($array["status"][0]['domain_from']); выдает null
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @servitpol ты копировал результат не из исходного кода браузера? В исходном коде, обычно не в одну строку var_export даёт результат для массива, а с отступами.
    В документации по массивам всё понятно? https://secure.php.net/manual/ru/language.types.array.php
     
  7. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    @denis01сори, не подумал:
    Код (Text):
    1.  
    2. <h1>Back links</h1>array (
    3.   'status' => 1,
    4.   'data' =>
    5.   array (
    6.     0 =>
    7.     array (
    8.       'domain_from' => '«www.1ovep1anet.ru/',
    9.       'domain_to' => 'google.com/chrome/browser/desktop/index.html',
    10.       'link_text' => 'Скачать Google Chrome',
    11.       'nofollow' => 1,
    12.       'noindex' => 0,
    13.       'exlinks' => 21,
    14.       'redirect' => 0,
    15.       'count' => 63,
    16.       'tic' => 0,
    17.       'link_rank' => 0,
    18.       'domain_rank' => 0,
    19.       'level_from' => 0,
    20.       'ip' => '8.185.134.204',
    21.       'add' => '2015-09-09',
    22.       'check' => '2016-08-15',
    23.       'del' => '',
    24.     ),
    25.   ),
    26.   'request_time' => 10.0920000000000005258016244624741375446319580078125,
    27. )
    По массивам в php пока вроде все понтяно, они похожи на объекты в javascript, читаю дальше...
     
    denis01 нравится это.
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @servitpol получилось обратится к domain_from? Если что, можно так: data -> 0 -> domain_from
     
  9. bikerlex

    bikerlex Активный пользователь

    С нами с:
    2 дек 2014
    Сообщения:
    344
    Симпатии:
    40
    Мне кажется автор не понимает что делает var_damp() это дамп информации о переменной. Он не для вывода данных в рабочий проект. Даже если и получить нужное значение вардампом это будет что-то типа string(31) "Тестовая строка"
     
  10. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Заработала конструкция var_dump($array['data']['0']['domain_from']); !!!УРААААА!!!Спасибо большое))
    --- Добавлено ---
    @bikerlex да, действительно, я пока малосоображаю, но результата string(20) "«www.1ovep1anet.ru/" мне достаточно! Теперь буду рисовать конструкцию с загрузкой файлов и обработкой

    Спасибо за ссылку, за два дня она мимо меня как-то прошла на этом сайте, хотя казалось перевернул его верх дном!
     
  11. bikerlex

    bikerlex Активный пользователь

    С нами с:
    2 дек 2014
    Сообщения:
    344
    Симпатии:
    40
    PHP:
    1. echo $array['data']['0']['domain_from']
     
  12. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    @bikerlex ооооо вообще то что нужно, спасибо. Я даже как-то не подумал использовать echo после того как конструкция заработала.
    У меня теперь другая проблема, после того как изменил занчение
    Код (Text):
    1. 'count' => 1,
    на
    Код (Text):
    1. 'count' => 2,
    попрежнему выводится только один урл, хотя код уже имеет вид
    Код (Text):
    1.  
    2. <h1>Back links</h1>array (
    3. 'status' => 1,
    4. 'data' =>
    5. array (
    6. 0 =>
    7. array (
    8. 'domain_from' => '«www.1ovep1anet.ru/',
    9. 'domain_to' => 'google.com/chrome/browser/desktop/index.html',
    10. 'link_text' => 'Скачать Google Chrome',
    11. 'nofollow' => 1,
    12. 'noindex' => 0,
    13. 'exlinks' => 21,
    14. 'redirect' => 0,
    15. 'count' => 63,
    16. 'tic' => 0,
    17. 'link_rank' => 0,
    18. 'domain_rank' => 0,
    19. 'level_from' => 0,
    20. 'ip' => '8.185.134.204',
    21. 'add' => '2015-09-09',
    22. 'check' => '2016-08-15',
    23. 'del' => '',
    24. ),
    25. 1 =>
    26. array (
    27. 'domain_from' => '«www.bi24.ru/a-support_search/',
    28. 'domain_to' => 'google.com/chrome/browser/desktop/index.html',
    29. 'link_text' => 'Скачать Google Chrome',
    30. 'nofollow' => 1,
    31. 'noindex' => 0,
    32. 'exlinks' => 6,
    33. 'redirect' => 0,
    34. 'count' => 48,
    35. 'tic' => 0,
    36. 'link_rank' => 0,
    37. 'domain_rank' => 0,
    38. 'level_from' => 1,
    39. 'ip' => '7.185.134.204',
    40. 'add' => '2015-09-13',
    41. 'check' => '2016-07-31',
    42. 'del' => '',
    43. ),
    44. ),
    45. 'request_time' => 7.20099999999999962341235004714690148830413818359375,
    Т.е. мне теперь нужно соорудить какой-то цикл for или foreach...
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    давай его, делай по $array['data'] в цикле уже $value['domain_from'] будет доступна, понятно как так вышло?
     
  14. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Да, принцип понял. Пытаюсь разобраться с foreach, но пока только 500 код вижу(( https://secure.php.net/manual/ru/control-structures.foreach.php по этой ссылке столько вариантов использования, не могу въехать какой из них подходит мне. Меня все наталкивает на мысль использовать цикл for. По логике, в конструкции
    Код (Text):
    1. echo $array['data']['0']['domain_from']
    мне нужно менять только
    Код (Text):
    1. ['0']
    т.е. я бы записал его к примеру как [$b] и перебирал через конструкцию
    Код (Text):
    1. for ($b = 0; ; $b++) {
    2. }
     
  15. bikerlex

    bikerlex Активный пользователь

    С нами с:
    2 дек 2014
    Сообщения:
    344
    Симпатии:
    40
    А как пытаешься? Покажи код.
     
  16. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    @bikerlex стыдно показывать, т.к. делаю методом тыка...ну вот один из последних вариантов:
    PHP:
    1. echo '<h1>Back links</h1>';
    2. $param = array('domain' => $_POST['your_url'], 'count' => 2, 'link_per_domain' => 1);
    3. $array = $mi->get('backlinks', $param);
    4. $count = count($array);
    5. for ($i = 0; $i < $count; $i++) {
    6. echo $array['data']['$i']['domain_from']"<br />\n";
    7. }
     
  17. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Код (Text):
    1. echo '<h1>Back links</h1>';
    2. $param = array('domain' => $_POST['your_url'], 'count' => 10, 'link_per_domain' => 1);
    3. $array = $mi->get('backlinks', $param);
    4. for($i = 0; ; ++$i) {
    5.     echo $array['data'][$i]['domain_from'];
    6.     echo"<br>";
    7. }
    8. }
    работает :)
    Блин, такой кайф получаю)По-моему я наркоманом становлюсь))
     
  18. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @servitpol
    Ещё для перебора массивов используют цикл foreach например.

    PHP:
    1. $newArr = ['color1' => 'red', 'color2' => 'yellow'];
    2. foreach ($newArr As $key => $value) {
    3.           echo $key;
    4.           echo '<br>';
    5.           echo $value;
    6. }
    Вставь к себе и посмотри на результат )
    И посмотри на результат :)
     
    denis01 нравится это.