[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