<?php
/**
* findInTree($array, $key, $value) Поиск массива в дереве по ключ=>значение
* @param array $array исходный массив
* @param string $key ключ
* @param string $value значение
* @access static
* @return array
*/
public static function findInTree($array, $key, $value, $key2 = null, $value2 = null)
{
$results = array();
$arrIt = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array));
foreach ($arrIt as $sub) {
$subArray = $arrIt->getSubIterator();
if(!is_null($key2) && !is_null($value2))
{
if ($subArray == $value2 && $subArray == $value) {
$results = iterator_to_array($subArray);
}
}
else
{
if ($subArray === $value) {
$results = iterator_to_array($subArray);
}
}
}
return $results;
}
Добавлено через 01:18 сек.
<?php
/**
* excludeFromTree($array, $key, $value) Исключение из массивов по ключ=>значение
* @param array object $array исходный массив
* @param string $key ключ
* @param string $value значение
* @access static
* @return array
*/
public static function excludeFromTree($array, $key, $value)
{
$results = array();
$arrIt = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array));
foreach($arrIt as $sub) {
$subArray = $arrIt->getSubIterator();
if($subArray[$key] === $value)
unset($subArray);
else $results[] = iterator_to_array($subArray);
}
return $results;
}
Добавлено через 04:09 сек.
<?php
/**
* Прицепляем обработчик (функцию) к каждому элементу массива
* @param array $array
* @param callback $callback
* @access static
* @return array
*/
public static function arrayMapDeep($array, $callback)
{
$new = [];
foreach ($array as $key => $val)
{
if(is_array($val))
$new[$key] = self::arrayMapDeep($val, $callback);
else
$new[$key] = call_user_func($callback, $val);
}
return $new;
}
Изменил: Станислав Крунич (08.12.2014 / 13:14)