[PHP] Новичкам: задаем вопросы

Discussion in 'PHP' started by Kaimi, 7 May 2015.

  1. look2009

    look2009 Member

    Joined:
    3 Jun 2009
    Messages:
    80
    Likes Received:
    63
    Reputations:
    5
    Есть тонкий вопрос, unset ключей массива как я понял отедает память, а вот теперь вопрос следующий unset для объектов и переменных действует одинаково? Т.е.

    $pool[$j] = new IndexThread($data);
    $pool[$j]->start();
    //ждём пока поток завершится
    sleep(30);
    unset($pool[$j]);

    и

    $a = 2;
    unset($a);

    Равносильны или обект оставляет свои следы в памяти.

    Спрашиваю т.к. при контроле потоков создаю новый поток в умерший $pool[$j], делать unset ключа массива накладно по памяти, но по немногу течёт при создании потока $pool[$j] в умерший $pool[$j], степень протечки зависит от колличества перезапущенных потоков, отсюдо вопрос как лучше убить объект. И сделать новую интерацию потока при завершении предыдущего.
     
  2. lambo

    lambo Member

    Joined:
    6 Feb 2019
    Messages:
    11
    Likes Received:
    5
    Reputations:
    0
    всем привет,подскажи с чего начать?раньше ставил,на бесплатные хостинги движки,чаты!но прошло более 10 лет)и не помню ничего)но как была эта тема интересна ,так она и осталась )
     
  3. firefighter777

    Joined:
    16 Jan 2019
    Messages:
    10
    Likes Received:
    6
    Reputations:
    0
    Главное научиться правильно задавать вопросы)))) С чего начать что? Ставить движки и чаты? Сейчас это можно делать из админпанелей многих хостеров вообще без заморочек. Если хочется развиваться как разработчик, то берем книжку по PHP для начинающих. А после освоения PHP идем осваивать какой нибудь фреймворк. К примеру Laravel.
     
    lambo likes this.
  4. lambo

    lambo Member

    Joined:
    6 Feb 2019
    Messages:
    11
    Likes Received:
    5
    Reputations:
    0
    спасибо,а можно ссылку на книгу,по которой уже обучались ?)
     
  5. firefighter777

    Joined:
    16 Jan 2019
    Messages:
    10
    Likes Received:
    6
    Reputations:
    0
    "PHP - Это просто программируем для веб сайта" Хорошая книга для старта
     
    lambo likes this.
  6. lambo

    lambo Member

    Joined:
    6 Feb 2019
    Messages:
    11
    Likes Received:
    5
    Reputations:
    0
    большое спасибо)
     
  7. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    unset объекта гарантированно высвободит память при следующем запуске сборщика мусора. Другой вопрос, что приложенный кусок кода, если я верно понимаю, лежит в теле foreach и способен безмерно раздуть массив $pool, во всём в системе всегда должны быть лимиты, если хотите обеспечить отказоустойчивость.
    Используйте SplFixedArray($maxThreadsCount), пишите в ключ остаток от деления на $maxThreadsCount и память точно не утечёт.

    Вы понимаете, что foreach будет запускать потоки последовательно, а не параллельно?
     
    look2009 likes this.
  8. Clocker

    Clocker New Member

    Joined:
    3 Mar 2019
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Привет мир, помоги понять, в php ещё только азы изучаю, задача такая, есть массив из алфавита каждая буква под своим ключем, есть переменная $string = "hello world";
    Перебирая массив нужно выводить ключи символов из переменной $string. За меня код прошу не писать, подскажите примерно как должна выполняться работа скрипта?
     
  9. BillyBons

    BillyBons Active Member

    Joined:
    1 Dec 2016
    Messages:
    221
    Likes Received:
    119
    Reputations:
    13
    Эммммм ... распарсить посимвольно строку, выполнить поиск соответствия в массиве, вывести соответствующий ключ ? ;-)
     
  10. Clocker

    Clocker New Member

    Joined:
    3 Mar 2019
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Как сделать поиск?
     
  11. BillyBons

    BillyBons Active Member

    Joined:
    1 Dec 2016
    Messages:
    221
    Likes Received:
    119
    Reputations:
    13
    https://secure.php.net/manual/en/function.array-search.php

    Return Values
    Returns the key for needle if it is found in the array, FALSE otherwise.

    If needle is found in haystack more than once, the first matching key is returned. To return the keys for all matching values, use array_keys() with the optional search_value parameter instead.
     
    Clocker likes this.
  12. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Если я всё верно понял и вам на выходе требуется ключ массива с алфавитом
    PHP:
    <?php

    $string 
    'hello world';
    $alphabet = [1=>'a'2=>'b'];
    $flipAlphabet array_flip($alphabet);

    foreach(
    str_split($string) as $symbol) {
      echo 
    $flipAlphabet[$symbol], " ";
    }

     
    crlf and Clocker like this.
  13. Clocker

    Clocker New Member

    Joined:
    3 Mar 2019
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Вот вроде, написал, вроде так должно быть, следующий шаг, буду разбираться как разбить значение переменной $name на массив без пробелов т.е. должно быть так $name = "дарквеб";

    PHP:
    $alfavit "а б в г д е ё ж з и й к л м н о п р с т у ф х ч ш щ ь ы ъ э ю я";
    $ex_alfa explode(" "$alfavit);

        
    $name "д а р к в е б";
        
    $name_res explode(" "$name);

        for(
    $i=0$i<=count($name_res); $i++){
            echo 
    array_search($name_res[$i], $ex_alfa);
        }
    На кириллице работает как надо. Всем спасибо!!!

    PHP:
    $alfavit "ABCDEFGHIKLMNOPQRSTVWXYZ";
    $ex_alfa str_split($alfavit);

        
    $name "DARKWEB";
        
    $name_res str_split($name);
        for(
    $i=0$i<=count($name_res); $i++){
            
    $res array_search($name_res[$i], $ex_alfa);
            echo 
    $res."<br>";
        }
     
    #313 Clocker, 3 Mar 2019
    Last edited: 3 Mar 2019
  14. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    PHP:
    for($i=0;$i<=strlen($name);$i++) print $alpha[$name[$i]]."\n";
     
  15. Clocker

    Clocker New Member

    Joined:
    3 Mar 2019
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Конструкцию
    PHP:
    print $alpha[$name[$i]]."\n";
    правильно я понимаю, сравнение ключей и их вывод?
     
  16. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    Производится доступ к элементу массива
     
  17. Clocker

    Clocker New Member

    Joined:
    3 Mar 2019
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Так или иначе, функция написана, с данной проблемой вопрос закрыт, осталось только понять как reverse сообразить.
     
  18. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    наговнокодить != изучить
    Не утверждаю, что мой пример идеален, но array_search избыточен для требуемой операции.
     
  19. Clocker

    Clocker New Member

    Joined:
    3 Mar 2019
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    Я и не говорю что это в реализацию, говно код никто не любит, это черновик, для понимания принципа работы программы. Там по сути ещё много чего нужно разобрать это только малая часть.
     
  20. mail156

    mail156 Banned

    Joined:
    28 Sep 2018
    Messages:
    467
    Likes Received:
    358
    Reputations:
    0
    Clocker,
    вместо printf, лучше использовать echo.