Ответы пользователя по тегу PHP
  • Как можно пересортировать массив по моему алгоритму?

    @ollisso
    Какой алгоритм не понятен, но ключевые слова: "пересортировать массив по моему алгоритму" - это одна из 2 функций:
    php.net/uasort
    php.net/uksort

    ------------------------------------
    Если по новому ставится задача то легче сделать так:
    1. выделяете ключевые слова (продам, продаётся, продажа"
    2. выделяются вторые слова
    3. склеиваются.

    $keys  = ["Продам", "Продаётся", "Продажа"];
    $words = ["котлету", "ботинок", "семки"];
    
    $groupSize  = 3;
    $amount = sizeof($keys)*sizeof($words);
    $list = array_fill(0,$amount, "");
    foreach ($keys as $group => $groupName) {
        foreach ($words as $item => $word) {
    
            $index = (($group+$item) * $groupSize + $group)%$amount;
    
            $list[$index] = $groupName . ' ' . $word;
    
    
        }
    
    }
    
    print_r($list);


    Или, если вы хотите по частям, то например так:

    /** Создаём список. важно что он имеет строгий формат */
    $keys  = ["Продам", "Продаётся", "Продажа"];
    $words = ["котлету", "ботинок", "семки"];
    
    $list = [];
    foreach ($words as $wordId => $word) {
        foreach ($keys as $groupId => $groupName) {
            $list[] = $groupName . ' ' . $word;
        }
    }
    // сортируем
    $groupSize  = 3;
    $output = array_fill(0, sizeof($list), "");
    
    foreach ($list as $id => $string) {
        $group = floor($id/$groupSize);
        $item = $id%$groupSize;
        $index = (($group+$item) * $groupSize + $item)%sizeof($list);
        $output[$index] = $string;
    
    }
    
    print_r($output);
    Ответ написан
    8 комментариев
  • Почему не работает ОПЕРАТОР ПРИСВАИВАНИЯ!?

    @ollisso
    1. сделайте так:

    var_dump($dost_res);
    var_dump(iconv("windows-1251", "utf-8", $dost_res));
    $like_mail .= iconv("windows-1251", "utf-8", $dost_res);
    2. запустите скрипт.
    что вывело ?

    99% что dost_res пустое или же не может адекватно конвертироваться из windows-1251 в utf-8
    Ответ написан
    3 комментария
  • Запрос из PHP к mysql не выдает ответа в исправном скрипте с вероятностью 99%?

    @ollisso
    Если уж вы используете mysql_query то проверяйте нормально на ошибки а?

    Пример из документации:
    <?php
    $result = mysql_query('SELECT * WHERE 1=1');
    if (!$result) {
        die('Invalid query: ' . mysql_error());
    }
    
    ?>


    Поменяйте свой запрос и начните читать документацию
    Ответ написан
  • Можно подобное преобразование массива сделать без цикла?

    @ollisso
    Если задача преобразовать такой результат:
    id, name, var
    1, name1, 10
    2, name2, 10
    3, name3, 30

    в такой:
    array(
    id => array(0 => 1,0 => 2,0 => 3),
    name => array(0 => name1,0 => name2,0 => name3),
    var => array(0 => 10, 0 => 20, 0 => 30),
    )


    то код в принципе работает.

    И повысить прозводительность его особо не получится, а если получиться то на сотые процента, т.е. это как экономия на спичках.

    Вопрос вам: вы уверены что это самая важная часть кода которую надо оптимизировать в первую очередь ? :)
    Ответ написан
    Комментировать
  • Как в PHP закрыть доступ к скрипту?

    @ollisso
    Если перифразировать вопрос так : как дать возможность открывать файл только с помощью аякса , но не давать по прямой ссылке то ответ прост:
    Проверяй что это аякс запрос и если это не он то выходите.

    Пример проверки:
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    	// аякс
    }else{ 
    // не аякс
    }


    Конечно это не защита от хакеров и тп. Только защита от прямого открытия в браузеру

    Такой заголовок может добавить кто угодно.
    Ответ написан
    Комментировать
  • Как подключиться к MSSQL в PHP 5.3 >?

    @ollisso
    Других вариантов, кроме того что написал DevMan особо нет.
    Вообще, если брать общий принцип, то варианты решения вопроса:
    1. установить драйвер (вы говорите что нельзя)
    2. эмулировать драйвер средствами пхп (для этого вам придётся писать всё с нуля. Вариант относится к научной фантастике. Про производительность молчим
    3. делать так, чтобы запросы шли на другой сервер, на котором стоит php-Mssql, и который будет проксировать запросы дальше - про скорости вам рассказать?

    4. написать скрипт (на другом сервере), который импортирует из mssql в Mysql например.
    Не всегда возможно, но может работать в частных случаях.

    Так что, или п1 или п4, выбирайте.
    Ответ написан
    Комментировать
  • Откуда быстрее получать информацию, mysql или файл?

    @ollisso
    Способы решения:
    1. читаем из файла всегда
    2. читаем 1 раз, храним где либо:
    2.1. в БД
    2.2. в xml или csv
    2.4. в json
    2.5. в виде пхп кода

    Для того чтобы ответить на вопрос, нужно знать следующее:
    1. как часто читается файл после обновления, насколько это критично чтобы работало быстро ?
    2. Размер файла
    3. Как именно читается - нужно читать все строки из него, или всего несколько?
    4. Что с файлом дальше делается ? Например если после чтения выводим просто хтмл реестр, то почему бы его сразу не готовить, и не хранить его?
    5. Ссколько много времени на разработку.

    Простой пример кейса:
    система уже работает, файл читается 1-2 раза в неделю.
    В данный момент из оригинального файла читается около секунды
    Особых лагов нет.
    На разботку метода конвертация уйдёт 1-2 дня.

    => Выгоды нет по замене

    Другой пример:
    1. файл читается каждый раз раз в секунду.
    2. из файла нужно 1-10 строк всего, по номеру
    3. В файле миллионы строк

    => лучше хранить в базе обычно.

    третий пример:
    1. файл читается каждый раз раз в секунду.
    2. файл нужен всегда весь
    3. В файле миллионы строк

    => лучше хранить в пхп коде

    Т.е. способы хранения данных таковы:

    1. БД
    + быстрая выборка, когда нужно несколько элементов из миллиона
    + можно использвоать в качестве данных для других запросов (джойны и тп)
    - временные издержки

    2. XML/CSV
    + можно использовать как есть, если нужен этот формат для чего либо другого.
    - очень "дорого" парсить файл каджый раз.
    Не рекомендую если нет особых причин

    3. JSON
    + Относительно быстро
    + удобно хранить
    + на некоторых данных быстрее чем ПХП (что странно)
    - надо парсить, опкешеры не помогают
    - невозможно брать только часть элементов. Если нужно 10 строк из миллиона, то придётся брать весь миллион в память.

    4. PHP
    Тут я имею в виду: хранить через var_export и подключать через require/include
    Обязательно: чтобы был APC/opcache
    + быстро
    + удобно хранить. обрабатывать. Получаешь сразу же массив
    - невозможно брать только часть элементов. Если нужно 10 строк из миллиона, то придётся брать весь миллион в память.
    - иногда JSON быстрее

    Что вам выбрать лучше - сложно сказать, вы не предоставили достаточно данных.
    Я бы взял PHP или БД, в зависимости от ситуации.
    Ответ написан
    Комментировать
  • Как решить проблему с конкуренцией запросов на чтение в PHP?

    @ollisso
    mysql_query("UPDATE `page` SET `views` = `views` + '1',status=IF(views>=10,'off','on') WHERE `status` = 'on' AND `id` = '1' and views < 10);
    
    $changed= mysql_affected_rows();
    
    if($changed){
    // пускаем 
    }else{
    mysql_query("UPDATE `page` SET `views` = `views` + '1'  WHERE `status` = 'on' AND `id` = '1');
    // закрыто
    }


    Т.е. основная идея:
    1. обновляем счётчик , но только если мы можем увидеть страницу
    2. сразу же проверяем, сработал ли апдейт. Если сработал- то ок, если не сработал, то значит:
    1. заход не подсчитан, надо добавить счётчик.

    Если вам не нужно считать тех кто не зашёл - то не добавляйте второй апдейт.
    Ответ написан
    Комментировать