Как быстро сгенерировать таблицу MySQL с большим количеством строк?

Можно с помощью утилиты sysbench:

sysbench --test=oltp --oltp-table-size=1000000 --oltp-table-name=%table% --mysql-db=%db% --mysql-user=%user% --mysql-password=%password% prepare

Покажите несколько алгоритмов сортировки на PHP

Пожалуйста:

//Bubble Sorting
function bubbleSort(array $arr) { 
    $count = count($arr);
    if ($count <= 1) {
        return $arr;
    }

    for ($i = 0; $i < $count; $i++) {                
        for ($j = $count - 1; $j > $i; $j--) {
            if ($arr[$j] < $arr[$j - 1]) {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j - 1];
                $arr[$j - 1] = $tmp;
            }
        }
    }
    
    return $arr;
} 

//Insert Sorting
function insertSort(array $arr) {
    $count = count($arr);
    if ($count <= 1) {
        return $arr;
    }

    for ($i = 1; $i < $count; $i++) {
        $cur_val = $arr[$i];
        $j = $i - 1;
        
        while (isset($arr[$j]) && $arr[$j] > $cur_val) {
            $arr[$j + 1] = $arr[$j];
            $arr[$j] = $cur_val;
            $j--;
        }
    }
    
    return $arr;
}

//Merge Sorting
function mergeSort(array $arr) {
    $count = count($arr);
    if ($count <= 1) {
        return $arr;
    }

    $left  = array_slice($arr, 0, (int)($count/2));
    $right = array_slice($arr, (int)($count/2));
    
    $left = mergeSort($left);
    $right = mergeSort($right);

    return merge($left, $right);
}

function merge(array $left, array $right) {
    $ret = array();
    while (count($left) > 0 && count($right) > 0) {
        if ($left[0] < $right[0]) {
            array_push($ret, array_shift($left));
        } else {
            array_push($ret, array_shift($right));
        }
    }
    
    array_splice($ret, count($ret), 0, $left);
    array_splice($ret, count($ret), 0, $right);
    
    return $ret;
}

//Quick Sorting
function quickSort(array $arr) {
    $count= count($arr);  
    if ($count <= 1) {
        return $arr;
    }

    $first_val = $arr[0];
    $left_arr = array();
    $right_arr = array();
    
    for ($i = 1; $i < $count; $i++) {
        if ($arr[$i] <= $first_val) {
            $left_arr[] = $arr[$i];
        } else {
            $right_arr[] = $arr[$i];
        }
    }

    $left_arr = quickSort($left_arr);
    $right_arr = quickSort($right_arr);

    return array_merge($left_arr, array($first_val), $right_arr);
}

//Select Sorting
function selectSort(array $arr) {
    $count= count($arr);
    if ($count <= 1){  
        return $arr;
    }
    
    for ($i = 0; $i < $count; $i++){  
        $k = $i;
        
        for($j = $i + 1; $j < $count; $j++){  
            if ($arr[$k] > $arr[$j]){
                $k = $j;
            }
            
            if ($k != $i){  
                $tmp = $arr[$i];  
                $arr[$i] = $arr[$k];  
                $arr[$k] = $tmp;  
            }  
        }
    }
    
    return $arr;  
}

Как размножить текст на PHP?

Имеется такой текст:

{Вкуси же, друг,|Съешь ещё этих {мягких|свежих}} {французских|испанских} {булок|пончиков}, да выпей {чаю|кофе}.
Нужно сгенерировать все возможные варианты этого текста, которые можно получить путем "раскрытия скобок". Скобки могут быть вложенные.

Для этой задачи в закромах имеется такое народное творчество:

function multiply_text($text) {
    $result = array($text);
    do {
        $found = array();
        $tmp = array();
        foreach ($result as $key=>$string) {
            if (preg_match('/\{([^\{\}]+)\}/Uis', $string, $matches)) {
                $found[] = $key;
                $substrings = explode('|', $matches[1]);
                foreach ($substrings as $s) {
                    $tmp[] = preg_replace('/\{'.preg_quote($matches[1]).'\}/Uis', $s, $string);
                }
            }
        }
        if (count($found) > 0) {
            foreach($found as $key){
                unset($result[$key]);
            }
            $result = array_unique(array_merge($result, $tmp));
        }
    } while (count($found) > 0);
    return $result;
}

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

Можно сделать из строки массив символов таким образом:

$chrArray = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);

И уже бежать по массиву как вам больше нравится.


Как перевести слово с помощью Google Translate?

Можно так:

function gtranslate($text, $from='auto', $to) {
    if ( $from == '' ) $from = 'auto';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://translate.google.com/'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept-Charset: utf-8,windows-1251;q=0.7,*;q=0.7")); 
    curl_setopt($ch, CURLOPT_REFERER, 'http://translate.google.com/');    
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "hl=ru&ie=UTF-8&js=n&prev=_t&layout=2&eotf=1&sl=".$from."&tl=".$to."&text=".urlencode($text));
    
    $res = curl_exec($ch);    
    if( curl_errno($ch) ) $res = false;
    curl_close($ch);  
    if ($res == false) return;
    
    $_ = '';
    if ( preg_match("~<span id=result_box class=\"(short|long)_text\">(.*)</span></span>~", $res, $translate) ) {
        $_ = strip_tags($translate[2]);
        if ( preg_match('~<~', $text) && preg_match('~>~', $text) ) {
            $_ = preg_replace('~&lt;~', '<', $_);
            $_ = preg_replace('~&gt;~', '>', $_);
            $_ = preg_replace('~</ ~', '</', $_);
        }
    } 

    return $_;
}  
 
echo gtranslate('Hello, world!', 'en', 'ru');

Как заменить "простые" кавычки в тексте на «ёлочки»?

На просторах сети была найдена простая и в то же время мощная функция:

function typograph($text) {
    $text = html_entity_decode($text, ENT_QUOTES, 'utf-8');
    $arr = array(
        // Убираем символ троеточия
        '/…/u' => '...',
        // Кавычки «ёлочки» &laquo; &raquo;
        '/(^|[\s;\(\[-])"/' => '$1«',
        '/"([\s-\.!,:;\?\)\]\n\r]|$)/' => '»$1',
        '/([^\s])"([^\s])/' => '$1»$2',
        // Длинное тире &mdash;
        '/(^|\n|["„«])--?(\s)/u' => '$1—$2',
        '/(\s)--?(\s)/' => ' —$2',
        // Непереносимый проблел после коротких слов &nbsp;
        '/([\s][a-zа-яё]{1,2})[ ]/iu' => '$1 '
    );
    foreach ($arr as $key=>$val) {
        $text = preg_replace($key, $val, $text);
    }
    // Вложенные кавычки &bdquo; &ldquo;
    while (preg_match('/(«[^«»]*)«/mu', $text)) {
        $text = preg_replace('/(«[^«»]*)«/mu', '$1„', $text);
        $text = preg_replace('/(„[^„“«»]*)»/mu', '$1“', $text);
    }
    return $text;
}

Покажите пожалуйста минимальный конфиг virtual host для Nginx + php-fpm?

server {
        listen   80;     
        server_name example.com;

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        location / {
              try_files $uri $uri/ /index.html;
        }

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }

        location ~ \.php$ {
              try_files $uri =404;
              fastcgi_pass unix:/var/run/php5-fpm.sock;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
        }
}

Как упаковать/распаковать .tar.gz?

Упаковать все файлы и папки в текущей директории:

tar -czf /path/to/new/archive.tar.gz *

Распаковать в текущую директорию:

tar -xzf archive.tar.gz

Есть ли аналог str_replace() из PHP в MySQL?

Есть:

UPDATE table_name SET field_name = REPLACE(field_name, 'old string', 'new string');

Как в .htaccess разрешить доступ к сайту только с одного IP?

Как-то так:

order deny,allow
deny from all
allow from 111.222.333.444

P.S. Правил allow может быть несколько.


Как прописать в .htaccess редирект c non-www на www?

Вот так:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

Как сгенерировать пароль на PHP?

Достаточно простой и в то же время гибкий вариант может выглядеть так:

function generatePassword($length=10) {
    $chars = '0123456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz-~!+*%$#&';
    return substr(str_shuffle($chars), 0, $length);
}

А фанатов минимализма порадуем таким однострочником:

$password = substr(hash('sha512', rand()), 0, 10);

Как заставить parseInt() возвращать число вместо NaN?

Можно так:

function myParseInt(n) {
    n = parseInt(n);
    if ( typeof n !== 'number' || !isFinite(n) ) n = 0;
    return n;
}

Как выбрать 5 последних строк из каждой категории?

Один из вариантов:

SET @i := 0, @category_id := 0, @n := 5;
SELECT * FROM (SELECT * FROM articles ORDER BY category_id ASC, id DESC) AS q WHERE (IF (@category_id = q.category_id, @i := @i + 1, (@category_id := q.category_id) AND (@i := 1)) <= @n - 1)

Как заменить каждый второй символ в строке на *?

Очень простое регулярное выражение:

$str = 'Lorem ipsum dolor sit amet';
echo preg_replace('/(.)./u', '$1*', $str);

На выходе получим:

L*r*m*i*s*m*d*l*r*s*t*a*e*

Как найти дубликаты в массиве?

Есть минимум два варианта.

Первый позволяет узнать так же количество дубликатов каждого элемента:

$a = array('q', 'w', 'e', 'r', 't', 'y', 'q', 'w');
print_r( 
 array_filter( array_count_values($a), function($v) {return $v>1;} ) 
);

Второй позволяет узнать индексы первого вхождения дубликатов:

$a = array('q', 'w', 'e', 'r', 't', 'y', 'q', 'w');
print_r(
 array_diff_assoc( $a, array_unique($a) )
);

Как проверить номер телефона на соответствие формату?

На StackOverflow был найден следующий трюк:

function validatePhoneNumber($number){
    $formats = array(
        '###-###-####', '####-###-###',
        '(###) ###-###','####-####-####',
        '##-###-####-####','####-####','###-###-###',
        '#####-###-###', '##########', '#########',
        '# ### #####', '#-### #####'
    );

    $format = trim(preg_replace('/[0-9]/', '#', $number));
    return in_array($format, $formats);
}

Просто перечисляем в $formats нужные нам форматы и наслаждаемся результатом.


Как вызвать метод (action) контроллера из шаблона (view) в Laravel?

Очень просто:

{{ ControllerName::actionName($params) }}

Разумеется метод actionName() должен быть статическим.

Как получить разность двух дат на PHP?

Класс DateTime легко решает эту задачу:

$date1 = new DateTime("2014-05-23");
$date2 = new DateTime("2012-12-21");
$diff = $date1->diff($date2);
print_r($diff);

Как получить (извлечь) расширение файла из имени?

Так:

$ext = pathinfo($filename, PATHINFO_EXTENSION);