我有以下数组作为输入:
$test = array(
array(
'cat','d'=>'fox',
),
'x' => array(
'y'=> array('fox'),
),
);
我需要在此数组中找到值“fox”的序列。如果给定数组作为输入,是否有任何函数可以生成序列。即。输出应采用以下格式
$test[0]['d']
$test['x']['y'][0]
答案 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]