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

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

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: признак последней итерации

[cc lang=”php”]
// пусть есть массив $spots, c любмыми типами ключей
$last_key = end(array_keys($spots));
foreach($spots as $k => $spot) {
$isLast = ($k === $last_key);
….
// что то делаем
}
[/cc]
Нужно просто получить последний ключ массива а потом сравнивать очередной ключ при каждой итерации. Можно конечно использовать $last_key = count($spots) – 1; но в случае ассоциативного массива это бы не сработало.