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

    Сделайте два SELECT. В одном - WHERE status <> 3 AND status <> 4, в другом — наоборот WHERE status = 3 OR status = 4. В оба SELECT'а к выбираемым столбцам добавьте еще один, например sort:
    SELECT 1 AS sort, a.author_id, a.status, u.username, u.user_colour FROM ...

    Так, чтобы в одной выборке было одно значение sort, в другой - другое (1 и 2).
    А потом объедините обе выборки UNION'ом, приправив все это нужными сортировками (сначала по полю sort, а внутри уже по дате)
    Ответ написан
    1 комментарий
  • Как организовать структуру таблиц в БД?

    Есть у вас таблица со списком товаров. Допустим, products. В ней столбцы с артикулом (id), названием, брендом и т.д.
    Добавляете еще одну таблицу, например, sizes. В ней название размера (L, XL, т.д.), остаток, внешний ключ product_id, ссылающийся на id в таблице products.
    А на странице товара получаете из бд не только данные из таблицы products по id, но и из таблицы sizes по аналогичному products_id.
    Ответ написан
    Комментировать
  • Как найти грамотный способ реализации парсера курсов валют?

    Второй вариант. От простейшего SELECT'а не убудет. Заодно не появится лишних проблем, если вдруг сайт, который парсится, приляжет ненадолго.
    Ответ написан
    1 комментарий
  • Как склеить массив?

    Объявление входного массива
    // Объявление входного массива
    $t0 = Array
    (
        '0' => Array
            (
                'column' => teplo,
                'da' => 5
            ),
    
        '1' => Array
            (
                'column' => teplo,
                'net' => 2
            ),
    
        '2' => Array
            (
                'column' => sherst,
                'est' => 3
            ),
    
        '3' => Array
            (
                'column' => sherst,
                'net' => 4
            ),
    
        '4' => Array
            (
                'column' => kril,
                'net' => 5
            ),
    
        '5' => Array
            (
                'column' => kril,
                'est' => 2
            ),
    
        '6' => Array
            (
                'column' => moloko,
                'est' => 4
            ),
    
        '7' => Array
            (
                'column' => moloko,
                'net' => 3
            ),
    
        '8' => Array
            (
                'column' => yaico,
                'net' => 3
            ),
    
        '9' => Array
            (
                'column' => yaico,
                'est' => 4
            )
    );

    // Немного магии
    $t1 = array_values(array_map('unserialize', array_unique(array_map('serialize', array_map(function($a){return array_merge($a[0], $a[1]);}, array_map(function($a_m) use ($t0){return array_values(array_filter($t0, function($a_f) use ($a_m){return $a_f['column']==$a_m['column'];}));}, $t0))))));
    
    // Вывод результата, полностью соответствующего требуемому
    print_r($t1);

    Отформатированный вариант
    $t1 = array_values(
    	array_map(
    		'unserialize', 
    		array_unique(
    			array_map(
    				'serialize', 
    				array_map(
    					function($a){
    						return array_merge($a[0], $a[1]);
    					}, 
    					array_map(
    						function($a_m) use ($t0){
    							return array_values(
    								array_filter(
    									$t0, 
    									function($a_f) use ($a_m){
    										return $a_f['column']==$a_m['column'];
    									}
    								)
    							);
    						}, 
    						$t0
    					)
    				)
    			)
    		)
    	)
    );

    Ответ написан
  • Разность элементов массива

    Отсортировать, затем последовательно смотреть массив на соответствие условию. Если нужно, чтобы суммарная разница между числами не превышала указанного значения, то делать цикл от 0 до n-2, в котором сравнивать a[i] c a[i+2]. При a[i-2]-a[i] <= m возвращать True, после цикла — False. (n - номер последнего элемента массива (размер массива), m - заданное число, которое нужно не превышать, i - счетчик).

    Реализовать, надеюсь, труда не составит?
    Ответ написан
  • PHP: Простейший алгоритм контрольного числа

    Простейший — это признак паритета. Состоит из одного бита.
    Ответ написан
    Комментировать
  • Как убрать лишние символы в при переходе на php 5?

    Символ возврата каретки — \r.
    Перевод строки — \n.
    У вас слеш прямой. Если эти символы выводятся, значит где-то в коде сказано вывести их.
    Ответ написан
  • PHP: strlen и первая строка из файла

    BOM-последовательность? Кодировка какая выставлена? Notepad++ позволяет управлять ею достаточно точно. Выставляйте «UTF-8 без BOM».

    Код для выпиливания BOM из строки:
    $bom = pack("CCC", 0xef, 0xbb, 0xbf);
    if (0 === strncmp($str, $bom, 3)) {
        echo "BOM detected - file is UTF-8\n";
        $str = substr($str, 3);
    }
    (взято отсюда)
    Ответ написан
    Комментировать
  • Как сложить 2 массива без замены аргументов в одинаковых ключах?

    $ar1 = array('img'=>'name.png','label'=>'myImage','desc'=>'ImageDesc');
    $ar2 = array('img'=>'name2.png','label'=>'myImage2','desc'=>'ImageDesc2');
    ...
    $arN = array('img'=>'nameN.png','label'=>'myImageN','desc'=>'ImageDescN');
    $newArray = array();
    for ($i=1; $i<=$N; $i++) {
        $_ar = 'ar'.$i;
        $newArray[] = $$_ar;
    }

    Вместо $arN - самый последний массив. $N - число таких массивов. Подразумевается, что имена массивов выглядят именно так, пронумерованы.
    Ответ написан
    Комментировать
  • Обрезка изображения на лету. Как можно оптимизировать код на PHP?

    А вы уверены, что там ищете? Если я верно понял из ветки комментариев, хостинг у вас jino.ru.
    Смотрим сюда.
    ImageMagick есть в качестве расширения PHP. Кроме того, можно исключить дополнительный слой абстракции и обращаться напрямую к консольной утилите, на которой основано расширение. Обычно она лежит в /usr/bin/convert. Доступ из PHP получается посредством exec(), например.
    К какому терминалу доступа у вас нет, тоже непонятно. SSH никто не отменял.
    Ответ написан
  • Какой учебник по php выбрать?

    Ответ написан
    Комментировать
  • Как получить несколько json?

    $myobj = '{
    "mac":{
    "users":[{"id":1,"name":"user_Slon"},{"id":2,"name":"skypidar"},{"id":3,"name":"akakii"},{"id":4,"name":"slon"}]
    }
    }';
    $myobj = json_decode($myobj, TRUE);
    foreach ($myobj['mac']['users'] as $element) {
        echo $element['name'];
    }
    Ответ написан
    3 комментария
  • Как соединить массив по ключу?

    Тех, кто говорит про получение данных на уровне БД, не слушайте. У вас получается динамическое число столбцов, а здесь без реального программирования БД не обойтись.

    На самом деле, требуемая структура не является оптимальной. Во всяком случае пока нет доводов в ее пользу. Лучше на выходе получать что-то вроде того, что приведу ниже. Такие данные гораздо удобнее в дальнейшем обрабатывать.

    $arr = array(array('id' => 1,  'year' => 2013, 'name' =>  "Александр"),
    	array('id' =>2, 'year' => 2013, 'name' =>  "Сергей"),
    	array('id' => 3, 'year' => 2012, 'name' =>  "Никита"),
    	array('id' => 4, 'year' => 2012, 'name' =>  "Володя"));
    
    function by_year($arr) {
    	$result = array();
    	foreach ($arr as $l) {
    		$result[$l['year']][] = $l['name'];
    	}
    	return $result;
    }
    
    print_r(by_year($arr));

    Результат:
    Array
    (
        [2013] => Array
            (
                [0] => Александр
                [1] => Сергей
            )
    
        [2012] => Array
            (
                [0] => Никита
                [1] => Володя
            )
    
    )


    Если нужно сохранять id пользователя, то ставьте его на место ключа ($result[$l['year']][$l['id']] = $l['name'];).

    Проверки на NULL-значения и прочие вводите по необходимости, в зависимости от ограничений на таблицах БД.
    Ответ написан
    Комментировать
  • Какие CMS являются современными с точки зрения архитектуры?

    Вы говорите об архитектуре CMS, но, уточняя, упоминаете лишь сторону верстки (табличная и блочная верстка, версии html и css). Если дело только в этом, то вопрос, скорее, исключительно к теме оформления.

    Вас действительно только фронт-энд интересует? Тогда CMS тут имеет значение небольшое. Какую тему сверстаете, такая и будет. Хоть на HTML 5, хоть на HTML 3.2.

    Важное требование лишь одно — чтобы реализация подходила вам и вашей целевой аудитории. Если цель — поддерживать максимум окружений, поддержка IE5 и всяких Нетскейпов (утрирую, конечно), то надо по-старинке все (за исключением разве что таблиц). Если же целевая аудитория по большей части использует актуальные версии браузеров, то можно уже играть с HTML5, CSS3 и прочими волшебными штуками.

    Еще нынче модно использовать всякие Responsive Design, а кто-то даже считает, что без этого сайт вообще не современный, и не надо так. Но это тоже на вкус и цвет.

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

    Тут как с выбором автомобиля. Кому-то спорткар: телок по клубам катать, а кому-то фургон: телок из загона к ветеринару катать.
    Ответ написан
    1 комментарий
  • Как в PHP извлечь содержимое тега, используя регулярные выражения?

    Если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то у вас есть две проблемы.
    Боян, но всегда в тему.
    preg_match_all ( '/<a[^>]+?[^>]+>(.*?)<\/a>/i' , $txt , $matches); 
    $info['TEST1:'] = str_replace("TEST1:","",$matches[1][0]);
    $info['TEST2:'] = str_replace("TEST2:","",$matches[1][1]);
    preg_match ( '/<span[^>]+?[^>]+>(.*?)<\/span>/i' , $txt , $matches);
    $info['INFO:'] = str_replace("INFO:","",$matches[1]);
    print_r($info);

    Для разбиения даты все же используйте explode(). Не надо пихать регэкспы везде и всюду.
    Ответ написан
    Комментировать
  • Почему сайт отображается ужасно?

    По ссылке скрин начала заголовочной части.
    Есть два варианта.
    1. Избавляйтесь от точек в начале путей (например, '/css/thickbox.css' вместо './css/thickbox.css') для css и js. Ну и все эти 'http://http://' тоже надо бы убрать.
    2. Уберите тег BASE или исправьте в нем 'http://http://'. Собственно, из-за него и летят относительные пути к чертям.
    Второй вариант предпочтительнее, так как он решает суть проблемы, а не является обходом ее.
    Ответ написан
    Комментировать
  • Как спарсить количество результатов при поиске через Google с помощью PHP

    Открываете гугл. Выполняете пару запросов. Смотрите на изменения url, на основе чего делаете выводы о том, как url формируется.
    Далее формируете список url для всех необходимых запросов, проходите по этим url, из отдаваемых данных с помощью регулярных выражений вытаскиваете число результатов (отображается под формой поиска).
    Все это реализуется стандартными средствами PHP.
    По необходимости можно усложнять и улучшать алгоритм до бесконечности.
    Ответ написан
    2 комментария