我正在尝试找到一种有效的方法来执行以下操作:
1)解析一个数组。 2)如果元素是单个值,则将其存储/回显。 3)如果元素是一个数组,请解析它并存储/回显它的所有元素。
一个例子是:
$ array = array(15,25,' Dog',[11,' Cat',' Cookie15'],22)
这将是回声&#d; dd:
15 25 狗 11 猫 Cookie15 22
注意:Arrays的嵌套图层的最大数量= 2(最大值是数组中的数组,不比此更深)。
到目前为止,我所做的代码是:
foreach($_POST as $key=>$value){
if(is_array($value))
{
<Not sure how to handle this condition! Need to parse the array and echo individual elements>
}
else
{
echo "Input name : $key Value : $value ";
}
}
编辑:以下是我对阵列的转储。由于某些奇怪的原因,嵌套元素显示为空白!
string '15' (length=2)
string '25' (length=2)
string 'Dog' (length=3)
array (size=3)
0 => string '' (length=0)
1 => string '' (length=0)
2 => string '' (length=0)
string '22' (length=2)
相关代码是:
foreach($_POST as $input) {
var_dump($input);
}
答案 0 :(得分:3)
使用RecursiveIteratorIterator和RecursiveArrayIterator绝对是最干净的方法:
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach ($it as $key => $value) {
var_dump($key, $value);
}
<小时/> 这是我以前的解决方案:
function handle($arr, $deepness=1) {
if ($deepness == 3) {
exit('Not allowed');
}
foreach ($arr as $key => $value) {
if (is_array($value)) {
handle($value, ++$deepness);
}
else {
echo "Input name: $key Value: $value ";
}
}
}
handle($_POST);
答案 1 :(得分:2)
这应该可以解决问题
PS:我编辑了对该函数的调用,我在foreach中调用它,现在我只是发送$ _POST,这是正确的。
第二次编辑:我不再将函数保存在变量中,而是将其声明。
function recursiveEcho($input){
if (is_array($input)) {
foreach ($input as $key => $value) {
if (is_array($value)) {
recursiveEcho($value);
} else {
echo "Input name: {$key} Value: {$value}";
}
}
} else {
// This is a string, there is no key to show
echo "Input value: {$input}";
}
};
recursiveEcho($_POST);
答案 2 :(得分:0)
这只能处理1级。要处理x
个级别,您必须使用递归函数,或继续嵌套if
语句。
foreach($_POST as $key => $value) {
if(is_array($value) {
foreach($value as $key2 => $value2) {
echo "Key: " . $key2 . "value: " .$value2;
}
} else {
echo "key" . $key . "value: ". $value;
}
}