Flat array to nested in php

Requirements = PHP 5.3

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:

$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

Добавление тега 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'," ")) ;

}

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

Кастомизация RadioButton в Android

Привет! Продолжая тему кастомизации элементов интерфейса Android хочу описать, как кастомизировать RadioButton.

Что бы создать кастомный стиль для RadioButton нужно создать drawable-ресурс, содержащий 4 иконки:

 Pressed  Checked
 True  True
 True  False
 False  True
 False  False

Поместите ваши изображения в res\drawable\ Далее нужно создать описание для этих ресурсов. Селектор.

Для этого нужно создать файл, например res\drawable\button_radio.xml в втором и будут описано, когда какую картинку размещать.

Пример:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true" android:state_pressed="false"
      android:drawable="@drawable/radio_on"/>
  <item android:state_checked="false" android:state_pressed="false"
      android:drawable="@drawable/radio_off"/>
  <item android:state_checked="true" android:state_pressed="true"
      android:drawable="@drawable/radio_on_pressed"/>
  <item android:state_checked="false" android:state_pressed="true"
      android:drawable="@drawable/radio_off_pressed"/>
</selector>

Подключить его из разметки можно при помощи следующей строки:

android:button="@drawable/button_radio"

А из JAVA кода можно так:

RadioButton newRadioButton = new RadioButton(this);
newRadioButton.setButtonDrawable(R.drawable.radio_button);

В коде выше описаны не все атрибуты.

Bash: Среднее арифметическое.

Нужно посчитать среднее арифметическое, написав скрипт на Bash.

Для передачи чисел для вычислений использую аргументы скрипта.

#! /bin/sh
i=0
sum=0
for an_arg in "$@" ; do
  sum=$(($sum + ${an_arg}))
  i=$(($i+1))
done
expr $sum / $i

Пример тестового запуска:

sh avg.sh 1 2 3 4 5

C, Unix, OPEN(),CLOSE(),READ(), WRITE(): Копирование файлов

Начался новый предмет, новые лабы.

Задачка примерно такая: Есть *nix-операционная система. В ней написать приложение на C, которое умеет копировать файлы при помощи системных вызовов Open(), Close(), Read(), Write();

В моем случае в качестве операционной системы использую Ubuntu 12.04

Continue reading

JAVA: Треугольник паскаля

Давненько не было школьных\вузовских задачек из классики.

Треугольник паскаля на JAVA:

import java.util.Scanner;


public class PascalTriangle {

    public static void main(String[] args) {
        
        int LINES = 0;
        System.out.println("Enter number of lines for Pascal Triangle:");
        // Reading
        Scanner reader = new Scanner(System.in);
        LINES = reader.nextInt();
        reader.close();
        // Calculation and print
        int [][] p = new int [LINES][];
        p[0] = new int [1];
        p[1] = new int [2];
        p[1][0] = p[1][1] = 1;
        System.out.println(p[0][0] = 1);
        System.out.println(p[1][0] + " " + p[1][1]);
        for (int i = 2; i < LINES; i++)
        {
            p[i] = new int [i+1];
            System.out.print((p[i][0] = 1) + " ");
            for (int j = 1; j < i; j++)
            {
                System.out.print((p[i][j] = p[i-1][j-1] + p[i-1][j]) + " ");
            }
            System.out.println(p[i][i]=1);
        }
    }

}
Вывод

Вывод программы

Заготовка для работы с SQLite в Android

Маленький шаблон, для работы с SQLite:

public class DBAdapter 
{
	private static final String DATABASE_NAME = "test";
	private static final int DATABASE_VERSION = 1;

	private final Context context;
	private DatabaseHelper DBHelper;
	private SQLiteDatabase db;

	public DBAdapter(Context ctx)
	{
		this.context = ctx;
		DBHelper = new DatabaseHelper(context);
	}
	private static class DatabaseHelper extends SQLiteOpenHelper
	{
		DatabaseHelper(Context context)
		{
			super(context,DATABASE_NAME, null, DATABASE_VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub

		}
	}
	public SQLiteDatabase GetDataBaseOpen() throws SQLException
	{
		return this.db;
	}
	public DBAdapter Open() throws SQLiteException
	{
		db = DBHelper.getWritableDatabase();
		return this;
	}
	public DBAdapter OpenForRead() throws SQLiteException
	{
		db = DBHelper.getReadableDatabase();
		return this;
	}
	public void Close() 
	{
		DBHelper.close();
	}
}

Как получить SSID Wi-Fi сети из Android-приложения

Возникла необходимость получить SSID сети из Android приложения. Облазил StackOverflow вдоль и поперек… Ответ помечен как правильный. но я имплементирую код который дан и… приложение на нем останавливается. Долго я мучился. Оказывается, нужно добавить Permission…, а лучше два. Код почти полностью из ответа, но у меня он полностью не заработал, так что пришлось удалить ту часть, которая не работает:

private String getCurrentSsid(Context context) {
		  String ssid = null;
		  ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
		  NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
		  if (networkInfo.isConnected()) {
		    final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
		    final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
		    if (connectionInfo != null) {
		      ssid = connectionInfo.getSSID();
		    }
		  }
		  return ssid;
		}

Метод возвращает название SSID (строка) или null если wi-fi не подключен.

Для работы требуются следующие разрешения:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Pascal: Даны произвольные текстовые файлы. Напишите функции, которые возвращают количество строк в файле и среднюю длину строк в тексте

Задачку прислали простенькую, но вдруг пригодится:)

Даны произвольные текстовые файлы. Напишите функции, которые возвращают количество строк в файле и среднюю длину строк в тексте

Continue reading