За последние 24 часа нас посетил 34981 программист и 1712 роботов. Сейчас ищут 803 программиста ...

Массив

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

  1. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    есть массив написан руками
    $arr2 = array(
    '10.23.21.197',
    '10.23.21.186',
    '10.23.21.194',
    '10.23.21.193',
    '10.23.21.187'
    );
    выводим на экран
    print_r($arr2);
    Выглядит так: Array ( [0] => 10.23.21.197 [1] => 10.23.21.186 [2] => 10.23.21.194 [3] => 10.23.21.193 [4] => 10.23.21.187) Все хорошо!
    Есть другой массив достаётся из базы sql
    while($row = sqlsrv_fetch_array($stmt))
    {
    $urls=$row["ip"];
    $arr1 = preg_split("/[\s,]+/",$urls);
    Выводим на экран
    print_r($arr1);
    Array ( [0] => 10.23.21.197 ) Array ( [0] => 10.23.21.186 ) Array ( [0] => 10.23.21.194 ) Array ( [0] => 10.23.21.193 ) Array ( [0] => 10.23.21.187 )
    Вопрос как сделать так чтоб второй массив стал походить на первый?
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Зачем их приводить к одному формату?
    Может подойти к задаче иначе и разбить строку функцией возвращающей не массив?)
    Что в $urls?
     
  3. villiwalla

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

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    PHP:
    1. $arr1[] = $ip;
     
  4. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    var_dump(is_array($urls)); ////bool(false) не массив
    print_r($urls); // Выводим
    10.23.21.19710.23.21.18610.23.21.19410.23.21.19310.23.21.187
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    У тебя после первой итерации цикла в переменной $urls список всех ip адресов записанные в строчку? o_O
     
  6. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Да. тут идея возникла можно через регулярное выражение разделить айпихи запятыми а потом explode (',', $urls2)
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А идея записать каждый ip в отдельное поле в базе данных не посещала?)
     
  8. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    она и так там в столбцах по строкам
    --- Добавлено ---
    SELECT *
    FROM imdb.dbo.MFUAll() а в ней
    while($row = sqlsrv_fetch_array($stmt))
    {
    $urls=$row["ip"]; айпи выбираю
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Эмм, а чего в прошлый раз ответил обратное? o_O

    Если в $row["ip"] только 1 ip, то просто $urls[] = $row["ip"];
    Если несколько ip возвращается при одной итерации цикла тогда у тебя с вероятностью 99% не правильная архитектура базы.
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.816
    Симпатии:
    1.333
    Адрес:
    Лень
    array_column
     
  11. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    while($row = sqlsrv_fetch_array($stmt))
    {
    $urls=$row["ip"];
    $arr1= preg_split("/[\s,]+/",$urls);
    //print_r($urls);
    //$str = preg_replace('/(\d{2})(\d{2})/', "$1\n$2", $urls);

    //$arr2 = preg_split('/\n/', $str);

    //print_r($arr2);
    foreach ($arr1 as $value)
    {
    $fp = fopen('mar.txt', 'a');
    fwrite($fp, $value."\r\n");
    fclose($fp);
    }


    }
    //$arr1= preg_split("/[\s,]+/",$urls);

    $var = file ("mar.txt");
    foreach ($var as $a) {
    $v = str_replace ("\r\n", "", $a);
    $arr9[] = $v;
    }

    $re=implode (",", $arr9);
    $arr = explode(',',$re);

    $new_arr = array_diff($arr, array(''));
    print_r($new_arr);
    Вот дурацкий обход, дело не в цикле почему тормозился snmp опрос ему не хватало времени сделали так
    Код (Text):
    1. print('<table style="border: 1px solid">');
    2. tab_td("TD");
    3. tab_td("URL");
    4. tab_td("OID1");
    5. tab_td("OID2");
    6. tab_td("OID3");
    7. $f = fopen('mar.txt', 'w');
    8. fclose($f);
    9. /* Ïîëó÷àåì ðåçóëüòàòû çàïðîñà è âûâîäèì èõ íà ýêðàí */
    10. while($row = sqlsrv_fetch_array($stmt))
    11. {
    12.     $urls=$row["ip"];
    13. set_time_limit(120);
    14.  
    15. $session = new SNMP(SNMP::VERSION_2c, $urls, 'public', 100000, 2);
    16.    print("<tr>");
    17.  
    18.       logf('- snmp get data from'. $urls);
    19.     tab_td($data=date("Y-m-d H:i:s"));
    20.     tab_td($urls);
    21.     tab_td($oidd1=@$session->get('.1.3.6.1.2.1.25.3.2.1.5.1'));
    22.     tab_td($oidd2=@$session->get('.1.3.6.1.4.1.2699.1.2.1.2.1.1.2.1'));
    23.     tab_td($oidd3=@$session->get('.1.3.6.1.2.1.43.10.2.1.4.1.1'));
    24.  
    25.  
    26.   print("</tr>");
    27.  
    28. }
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    я перестал понимать тебя... единственное что могу сказать так это то что твоему работодателю пора искать нового программиста.
    Херня какая то у тебя...
     
    MouseZver нравится это.
  13. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Хы, я не программист) я наверно и не буду профи в этом деле, по то му как в нашей сфере это един запросы на опрос оборудования