[Flow] array_find_deep Utility
Christian Müller
christian.mueller at typo3.org
Sat Jun 21 12:07:14 CEST 2014
Hi,
sounds interesting. Do you want to open a change request? Or just
collect feedback here first?
I guess we would want to see some typical use case scenarios to consider it.
Cheers,
Christian
Regine Rosewich wrote:
> Hi,
>
> would it be possible to add the following function to the Utility->Arrays
> Class of TYPO3.Flow?
>
> Regine
>
> /**
>
> * Searches a value in an array no matter if the array consists of
> associated arrays
>
> * and no matter how deep the associations are structured
>
> *
>
> * Example:
>
> * $a = array(
>
> * 'key1' => array(
>
> * 'key2' => array(
>
> * 'key3' => 'value',
>
> * 'key4' => array(
>
> * 'key5' => 'value2'
>
> * )
>
> * )
>
> * ));
>
> *
>
> * var_dump(array_find_deep($a, 'value'));
>
> * array
>
> * 0 => string 'key1' (length=4)
>
> * 1 => string 'key2' (length=4)
>
> * 2 => string 'key3' (length=4)
>
> *
>
> * var_dump(array_find_deep($a, 'value2'));
>
> * array
>
> * 0 => string 'key1' (length=4)
>
> * 1 => string 'key2' (length=4)
>
> * 2 => string 'key4' (length=4)
>
> * 3 => string 'key5' (length=4)
>
> *
>
> * var_dump(array_find_deep($a, 'value3'));
>
> * array
>
> * empty
>
> *
>
> * @param mixed $needle the value to search for
>
> * @param array $haystack the array potentially consisting of a structure of
> associated arrays
>
> * @param array $keys
>
> *
>
> * @return array an array with informations where in the array structure the
> value(s) have been found
>
> */
>
> static public function array_find_deep($needle, array $haystack, $keys =
> array()) {
>
> if (count($haystack) > 0) {
>
> foreach($haystack as $key => $value) {
>
> if (is_array($value)) {
>
> $sub = self::array_find_deep($needle, $value, array_merge($keys,
> array($key)));
>
> if (count($sub)) {
>
> return $sub;
>
> }
>
> } elseif ($value === $needle) {
>
> return array_merge($keys, array($key));
>
> }
>
> }
>
> }
>
> return array();
>
> }
>
>
>
>
>
More information about the Flow
mailing list