在php中查找数组/对象序列

时间:2014-01-27 15:14:40

标签: php arrays object sequence

我有以下数组作为输入:

$test = array(
            array(
                'cat','d'=>'fox',
            ),
            'x' => array(
                'y'=> array('fox'),
            ),
        );

我需要在此数组中找到值“fox”的序列。如果给定数组作为输入,是否有任何函数可以生成序列。即。输出应采用以下格式

$test[0]['d']
$test['x']['y'][0]

1 个答案:

答案 0 :(得分:0)

阅读评论后,答案很简单。您只是询问是否有任何内置的PHP函数来执行此任务。

答:没有没有内置功能,你自己编写。它应该导致递归算法。 (或者甚至是迭代的,因为递归总是可以被迭代代替)。

这是一个能完成这项工作的功能。请注意,我已经通过迭代替换了递归,以便调整算法:

$a = array(
    array(
        'cat','d'=>'fox',
    ),
    'x' => array(
        'y'=> array('fox'),
    ),
);

function pathto($value, $array) {
    // init stack
    $stack = array(array($array, 'array'));
    do {
        // get first value from stack
        list ($current_value, $current_path) = array_shift($stack);

        // if current is a scalar value then compare to the input
        if($current_value === $value) {
            echo $current_path . PHP_EOL;
            continue;
        }

        // push array childs to stack
        if(is_array($current_value)) {
            foreach($current_value as $k => $v) {
                $k = is_string($k) ? "'$k'" : $k; 
                // push child and path to file
                array_push($stack, array (
                    $v, $current_path . '[' . $k . ']' 
                )); 
            }   
        }   
    } while (!empty($stack));
}

pathto('fox', $a);

输出:

$test[0]['d']
$test['x']['y'][0]