Перебор многомерного массива в поисках ключа

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

function recarray($ar, $searchfor) {
    static $result = array();

    foreach($ar as $k => $v) {
    if ($k == $searchfor) $result[] = $v;
        if (is_array($ar[$k]))  recarray($v, $searchfor);
    }
    return $result``;
}

$tst = array (
  'bob' => 'Bob MEN',
  'google' => array (
      'somekey' => 'somevalue',
      'bob'     => 'big man'
  ),
  'martin' => array(
      'bob'     => array(
      'friend' => true,
      'age'    => 100500),
      'cat'     => 'animal'
  )
);

$result = recarray($tst, 'bob');

print_r($result);

Read more

Удобный доступ к конфигу/массиву

Долго думал как назвать пост. Иногда очень достают километровые строки для доступа к массиву(как правило километры – именно в конфиге), например:

$this->config->config['siteconfig']['someavatar']['normal']['height']

А хочется что – то более лаконичное, вроде

$this->_siteConfig('someavatar', 'normal', 'height');

или может даже

$this->_siteConfig('someavatar/normal/height')

Read more

flex: Array в качестве dataProvider в DataGrid’е

Изначально у меня все данные для отображения в таблицах хранились в обычных массивах Array, с биндингом, в общем виде как то так:

[Bindable]
protected var super_mega_array:Array = new Array();

В него push’ались элементы, и всё это дело какбе работало. В процессе работы приложения массив меняется, я надеясь на [Bindable] думал, что таблицы тоже должны какбе поменяться. А вот и нет.

Read more

foreach: признак последней итерации

        // пусть есть массив $spots, c любмыми типами ключей
        $last_key = end(array_keys($spots));
        foreach($spots as $k => $spot) {
            $isLast = ($k === $last_key);
            ....
            // что то делаем
        }

Нужно просто получить последний ключ массива а потом сравнивать очередной ключ при каждой итерации. Можно конечно использовать $last_key = count($spots) – 1; но в случае ассоциативного массива это бы не сработало.