Reputation: 58
I am trying to find an efficient way to do the following :
1) Parse an array. 2) If the element is a single value, store it/echo it. 3) If the element is an array, Parse it and store/echo all of its elements.
An example would be :
$array = array(15,25,'Dog',[11,'Cat','Cookie15'],22)
This would be echo'd as :
15 25 Dog 11 Cat Cookie15 22
Note : The maximum number of Nested layers of Arrays = 2 (The max is an Array within an Array, not deeper than that).
The code I have made so far is :
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 ";
}
}
Edit: The following is my dump for the array. The nested elements show blank for some odd reason!
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)
The relevant code is :
foreach($_POST as $input) {
var_dump($input);
}
Upvotes: 0
Views: 4398
Reputation: 3143
This should do the trick
PS.: I edit the call to the function, i was calling it inside a foreach, now i'm just sending $_POST wich is correct.
Second edit: I'm not saving the function inside a variable anymore, instead i'm declaring it.
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);
Upvotes: 2
Reputation: 29424
Using a RecursiveIteratorIterator and a RecursiveArrayIterator is definitely the cleanest way:
$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);
Upvotes: 3
Reputation: 14649
This will only handle 1 level. To handle x
amount of levels, you either have to use a recursive function, or keep on nesting if
statements.
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;
}
}
Upvotes: 0