Flat array to nested in php

Requirements = PHP 5.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function buildTree($flat, $pidKey, $idKey = null)
        {
            $grouped = array();
            foreach ($flat as $sub){
                $grouped[$sub[$pidKey]][] = $sub;
            }
 
            $fnBuilder = function($siblings) use (&$fnBuilder, $grouped, $idKey) {
                foreach ($siblings as $k => $sibling) {
                    $id = $sibling[$idKey];
                    if(isset($grouped[$id])) {
                        $sibling['children'] = $fnBuilder($grouped[$id]);
                    }
                    $siblings[$k] = $sibling;
                }
 
                return $siblings;
            };
 
            $tree = $fnBuilder($grouped[0]);
 
            return $tree;
        }
function buildTree($flat, $pidKey, $idKey = null)
        {
            $grouped = array();
            foreach ($flat as $sub){
                $grouped[$sub[$pidKey]][] = $sub;
            }

            $fnBuilder = function($siblings) use (&$fnBuilder, $grouped, $idKey) {
                foreach ($siblings as $k => $sibling) {
                    $id = $sibling[$idKey];
                    if(isset($grouped[$id])) {
                        $sibling['children'] = $fnBuilder($grouped[$id]);
                    }
                    $siblings[$k] = $sibling;
                }

                return $siblings;
            };

            $tree = $fnBuilder($grouped[0]);

            return $tree;
        }

Usage:

1
2
3
4
5
6
7
8
9
$flat = array(
    array('id'=>100, 'parentID'=>0, 'name'=>'a'),
    array('id'=>101, 'parentID'=>100, 'name'=>'a'),
    array('id'=>102, 'parentID'=>101, 'name'=>'a'),
    array('id'=>103, 'parentID'=>101, 'name'=>'a'),
);
 
$tree = buildTree($flat, 'parentID', 'id');
print_r($tree);
$flat = array(
    array('id'=>100, 'parentID'=>0, 'name'=>'a'),
    array('id'=>101, 'parentID'=>100, 'name'=>'a'),
    array('id'=>102, 'parentID'=>101, 'name'=>'a'),
    array('id'=>103, 'parentID'=>101, 'name'=>'a'),
);

$tree = buildTree($flat, 'parentID', 'id');
print_r($tree);

Thanks! http://stackoverflow.com/a/27360654/1886270

Автоматическое форматирование кода в соответствии со стандартами PSR в PHPStorm

Пользователь Fabien Potencier (fabpot) разработал инструмент, который автоматически форматирует и перестраивает ваш код следуя стандартам PSR.

Этот пост и инструкция помогут вам установить этот инструмент и добавить его в PHPStorm, добавить сочетание клавиш что бы выполнять проверку текущего открытого файла.

Continue reading

Добавление тега rel=canonical в OpenCart

OpenCart бесплатная система для создания интернет-магазинов. Насмотря на свою поулярность, некотоые функции отсутствуют. Это особенно заметно в SEO. OpenCart имеет инструмент добавления тега rel=”canonical” на страницы товаров, но нет возможности добавить данный тег на страницу категорий или же на не менее важную домашнюю страницу.

Если установить OpenCart без исправления этой проблемы, поиск Google по запросу site:yourdomain.com вернет миллионы вариантов для каждой категории, страницы будут дублироваться.

Continue reading

Разбор GET (Query) параметров на Dart

Потребовалось разобрать URL текущей страницы и получить значения GET-параметров по их имени. Набросал функцию:

String _getParameterByName(String name) {
  name.replaceAll('/[\[]/',"\\[").replaceAll('/[\]]/', "\\]");
  RegExp regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
  var results = regex.allMatches(window.location.toString());
  return results.length == 0 ? '' : Uri.decodeComponent(results.last.group(1).replaceAll('/\+/g'," ")) ;

}

Данная функция принимает имя параметра, а возвращает его значение, если он найден, иначе пустую строку.

MySQL 5.6 & PHP 4.4

В MySQL 5.6 значительно поменялись настройки безопасности.

При попытке соединения с базой данных из PHP 4.4.x появляется ошибка:

Client does not support authentication protocol requested
by server; consider upgrading MySQL client

Что бы заставить работать PHP 4.4 вместе с MySQL 5.6 нужно:

  1. Добавить в файл my.conf параметр skip-secure-auth после чего нужно перезапустить сервис MySQL
  2. Обновить информацию о пароле пользователя. Вместо нового формата нужно использовать старый. Для этого:
UPDATE mysql.user SET plugin = 'mysql_old_password'
WHERE User = 'some_user' AND Host = 'some_host';
FLUSH PRIVILEGES;
SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

Омск

Приветствую тебя, читатель!

Вчера вернулся из прекрасного сибирского города Омска. Что я там делал? Это просто попытка вырваться из привычного Новосибирска, посмотреть на другой город, другую жизнь в какой-то мере.

Постараюсь разделить этот небольшой рассказ на части. Кому интересно добро пожаловать

Continue reading

Как запустить VBScript в режиме x86 \ Как запустить консоль в режиме x86

Возникла достаточно интересная проблема.

Есть старый VBScript’ик, который соединяется с базой данных и забирает оттуда данные. Делает он это через драйвер, который ставится вместе с BDE.

Проблема… Нужно перенести этот скрипт из Windows Server 2003 на Windows Server 2012 R2. При попытке прямого запуска получаем ошибку — невозможно соединиться с базой. Более того, он даже не может создать объект.

Как решить это?

Continue reading