За последние 24 часа нас посетили 17217 программистов и 1594 робота. Сейчас ищут 1348 программистов ...

Не работает перебор масива

Тема в разделе "PHP для новичков", создана пользователем rasl89, 30 апр 2020.

Метки:
  1. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    Помогите, не работает перебор массива.

    Есть массив с ссылками:
    $ssil12

    Задача подключить скрипт обработки одной ссылки, перебрать массив с ссылками, выполняя скрипт по каждой ссылке

    перебор:
    PHP:
    1.     foreach ($ssil12 as $https) {
    2.         perebor($https);
    3.     }
    Функция (в ранее подключенном файле):
    PHP:
    1. function perebor ($https='') {
    2. $html = str_get_html($https); //получаем объект
    3. //обрабатывает ссылку, вносит в бд
    4. }

    В теле функции :
    $html = str_get_html($https); //получаем объект
    может в него не передаются ссылки поочередно?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    1. 99,9% функция perbor() не подозревает о существовании str_get_html()
    2. что мешает посмотреть - что приходит внутри ? типа print_r($https);
     
  3. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    забыл дописать, перебор берет только первую ссылку и обрабатывает ее и все, несмотря на указание перебора дальше перебор остальных ссылок не идет
    --- Добавлено ---
    конечно я смотрел что происходит с $https, print_r($https) печатает только одну ссылку, первую из массива
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    Не верю (с) Станиславский
    покажите что выводит print_r($ssil12) ?
     
  5. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    Вот:
    Array ( [0] => https://doramatv.live/the_raid__redemption [1] => https://doramatv.live/the_tiger_mask [2] => https://doramatv.live/iron_girl [3] => https://doramatv.live/the_foreigner [4] => https://doramatv.live/marrying_the_mafia_2 [5] => https://doramatv.live/bikuu [6] => https://doramatv.live/iceman [7] => https://doramatv.live/the_adventurers [8] => https://doramatv.live/the_beast [9] => https://doramatv.live/a_better_tomorrow_4 [10] => https://doramatv.live/saving_general_yang [11] => https://doramatv.live/gachiban_max [12] => https://doramatv.live/detektiv_novichok [13] => https://doramatv.live/mstitel [14] => https://doramatv.live/wolf_warriors_2 [15] => https://doramatv.live/heartbreak_hotel [16] => https://doramatv.live/the_storm_riders [17] => https://doramatv.live/nameless_gangster__rules_of_the_time [18] => https://doramatv.live/shiri [19] => https://doramatv.live/money_bag [20] => https://doramatv.live/umizaru_4__brave_hearts [21] => https://doramatv.live/air_strike [22] => https://doramatv.live/009_no_1__the_end_of_the_beginning [23] => https://doramatv.live/bangkok_adrenaline [24] => https://doramatv.live/three__2016_ [25] => https://doramatv.live/the_knight_of_shadows__between_yin_and_yang [26] => https://doramatv.live/the_flying_swords_of_dragon_gate [27] => https://doramatv.live/ichi_the_killer [28] => https://doramatv.live/good_friends [29] => https://doramatv.live/all_bark_no_bite [30] => https://doramatv.live/the_spy__2012_ [31] => https://doramatv.live/the_rebel [32] => https://doramatv.live/cyber_wars [33] => https://doramatv.live/gingko_bed_2 [34] => https://doramatv.live/yakuza_justice__erotic_code_of_honor [35] => https://doramatv.live/huligany [36] => https://doramatv.live/an_empress_and_the_warriors [37] => https://doramatv.live/brotherhood_of_blades_ii__the_infernal_battlefield [38] => https://doramatv.live/manhunt__2017_ [39] => https://doramatv.live/china_1911 [40] => https://doramatv.live/dragonball_evolution [41] => https://doramatv.live/cold_war [42] => https://doramatv.live/the_four_2 [43] => https://doramatv.live/legendary_amazons [44] => https://doramatv.live/three_kingdoms_resurrection_of_the_dragon [45] => https://doramatv.live/little_big_soldier [46] => https://doramatv.live/the_legend_of_evil_lake [47] => https://doramatv.live/sweet_alibis [48] => https://doramatv.live/switch [49] => https://doramatv.live/running_wild [50] => https://doramatv.live/zatoichi [51] => https://doramatv.live/nerushimyi [52] => https://doramatv.live/bud_v_avangarde [53] => https://doramatv.live/who_s_got_the_tape_ [54] => https://doramatv.live/sailor_suit_and_machine_gun__graduation [55] => https://doramatv.live/the_guillotines [56] => https://doramatv.live/high___low_the_mighty_warriors [57] => https://doramatv.live/my_school_mate__the_barbarian [58] => https://doramatv.live/kungfu_monstr [59] => https://doramatv.live/siyama__village_of_warriors [60] => https://doramatv.live/the_scam [61] => https://doramatv.live/taekwonboys [62] => https://doramatv.live/vengeance_is_mine [63] => https://doramatv.live/tekken [64] => https://doramatv.live/feibl [65] => https://doramatv.live/fist_of_legend [66] => https://doramatv.live/fearless [67] => https://doramatv.live/captured [68] => https://doramatv.live/city_hunter__1993 [69] => https://doramatv.live/the_masked_girl )
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    @ADSoft, там походу проблема в самом «черном ящике». ТСу на разных форумах уже и намекали на это, и прямо об этом говорили, а он все мыкается, бедолага.
    --- Добавлено ---
    P.S. Последний пост ТСа сильно смахивает на жесткий спам :)
     
  7. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    дайте прямой ответ ребят(( чтобы я не "мыкался" яж новичок, уже 3 дня сижу не могу этот момент разобрать(((
    --- Добавлено ---
    это не спам...я просто ищу где помогут
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Я тебе на др. форуме прямо написал: может, проблема тут: str_get_html($https). Но она может быть и тут:
    PHP:
    1. //обрабатывает ссылку, вносит в бд
    Свободен :)
     
    #8 miketomlin, 30 апр 2020
    Последнее редактирование: 30 апр 2020
  9. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    //обрабатывает ссылку, вносит в бд - эта часть скрипта работает безукоризненно, когда даешь ей одну ссылку, я пытался заставить его перерабатывать каждую ссылку по очереди из массива.

    понятно, помощи не дождешься, особенно от тебя miketomlin
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Mля, тут помогут только телепаты! Не заставляй посылать тебя куда подальше.
    --- Добавлено ---
    И, да, пинок под зад – часто самая действенная помощь, даже если вы пока этого не понимаете.
     
    #10 miketomlin, 30 апр 2020
    Последнее редактирование: 30 апр 2020
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    ну тогда
    PHP:
    1. foreach ($ssil12 as $https) {
    2.        echo $https.'<br/>';
    3.   }
    и смотрите - если ссылки в цикле выводятся - то "дело было не в бобине" )))
     
  12. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    выводится, одна первая
     
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    Не верю .... возможно есть еще какой то код между строк, который вы нам не показываете
    если преде прямо циклом print_r() выводит то что вы показали
     
  14. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    print_r тоже выводит только одну ссылку, но если печатать массив, который хочешь перебрать, то печатает весь массив

    Весь КОД:
    PHP:
    1. <head>
    2.  
    3. <title>Dor0</title>  
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    5.  
    6. </head>
    7.  
    8. <body>
    9.  
    10. <form action="" method="POST">
    11.     <input type="text" name="url" size="50" placeholder="Адрес раздела">
    12.  
    13.     <span>В категорию:</span><select name='cat'><option value='0'>Прочие</option><option value='5'>Основные</option></select>
    14.     </br></br><span>Прокси</span></br><input type="text" name="prx" size="100" placeholder="177.67.82.13:8080">
    15.     </br></br><input type="submit" name='buttonpars' value="Спарсить">
    16. </form>
    17.  
    18. </body>
    19.  
    20.  
    21. <?php
    22.  
    23. $prx='';
    24.  
    25. if(!empty($_POST['prx'])){$prx=$_POST['prx'];}
    26.  
    27. require_once ('prs4/simple_html_dom/simple_html_dom.php'); //подключаем библиотеку DOM
    28.  
    29. // Првоеряем заполнено ли поле URL
    30.  
    31. if (isset($_POST['buttonpars'])) {
    32.     $url = $_POST['url'];
    33.     if ($_POST['url'] == '') {
    34.         echo 'Введите URL!';
    35.     }
    36. }
    37.  
    38. require_once('curl.php'); //подключаем curl
    39.  
    40. //Создаем объект библиотеки
    41.     $html = str_get_html($url); //получаем объект
    42.  
    43. // страницы на которые будем заходить
    44.  
    45. foreach ($html->find('div[class=desc] h3 a[href]') as $ssil) {
    46.     $ssil1[]= $ssil->href; //нашли все клаассы, все разделы с ссылкой заьтем все хрюфы, все занесено в массив $ssil1, ->href - позволяет нам оставить только ссылку (без имени и т д)
    47. }
    48.  
    49. $sitemain = 'https://doramatv.live'; // обьявляем основной домен
    50.  
    51. foreach ($ssil1 as &$value) { //скрепляем основной домен и полуссылку
    52.     $value = $sitemain.$value;
    53.     unset($value);
    54. }
    55. //print_r($ssil1);
    56. $ssil12=$ssil1;
    57. //print_r($ssil12);
    58.  
    59. include_once('prs4/prs4.php');
    60.  
    61. /*
    62. for($i=0;$i<count($ssil12);$i++){
    63.     $https= $ssil12[$i];
    64.     perebor($https);
    65. }*/
    66.  
    67.  
    68. foreach ($ssil12 as $https) {
    69.     //print_r ($https);
    70.         perebor ($https);
    71. }
    72.  
    73. ?>
    прокси еще не сделал туда не смотрите
     
  15. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    PHP:
    1. // тут добавляем
    2. print_r($ssil12);
    3.  
    4. foreach ($ssil12 as $https) {
    5.     echo $https;
    6.         //perebor ($https);
    7. }
    и какой результат?
     
  16. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    print_r($ssil12); - четко печатает весь массив
    echo $https; - показывает одну ссылку, первую
     

    Вложения:

  17. rasl89

    rasl89 Новичок

    С нами с:
    22 мар 2020
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Россия, Уфа
    Сделал перебор ассоциативного массива:
    PHP:
    1. foreach ($ssil12 as $key => $val){
    2.     echo '<br/><br/>'.$val.'<br/><br/>';
    3.     //perebor ($val);
    4. }
    echo тут печатает все ссылки, все ок, но когда подключаю функцию печатает одну ссылку
     
  18. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    1. я специально закоментил вашу функцию, без нее должно нормально все работать
    2. еще раз говорю - почитайте про видимость переменных и функций, внутри функции перебор неизвестна ваша другая функция. Передвайте экземпляр этого объекта через параметры итд
    кароче дело не в цикле