Ângelo Rigo
Ângelo Rigo

Reputation: 2155

PHP format an array of arrays into a flat array

I have an generated array into this format and want to generated a second array to fit into a file that expects the specific format

This is the array i have :

(int) 0 => array(
        [Service] => Array
        (
            [id] => 6948229
            [document] => Array
                (
                    [number] => 0003928425
                )
        )

This is the array i want to build from the previous array (will have many indexes)

verified[id]
verified[number]

So far i build this script:

foreach($data as $key=>$value )
        {
            echo '<br>key '.$key;
            foreach($value as $k=>$v)
            {
                $Verified[$key]['id'] = $v["id"];
                $Verified[$key]['number'] = $v['document']['number'];

But just get undefined index error message.

Which indexes i must use to get the flatten array ?

Upvotes: 1

Views: 80

Answers (3)

Manjeet Barnala
Manjeet Barnala

Reputation: 2995

There is no need of second foreach and you are getting undefined index because you are using $v['id'] insted of $val['id'] in that line $Verified[$key]['id'] = $v["id"];

<?php 
$data = array('Service' => array('id' => 6948229,'document' => array ('number' => '0003928425' )));
$verified = array();
foreach($data as $key => $val)
{ 
    $verified[$key]['id'] = $val['id'];     
    $verified[$key]['number'] = $val['document']['number'];     
}
echo "<pre>"; print_r($verified);
?>

output

Array
(
    [Service] => Array
        (
            [id] => 6948229
            [number] => 0003928425
        )

)

Upvotes: 1

Vishnu Nair
Vishnu Nair

Reputation: 2433

From what I can make from your question, you can do something like this to get the desired output,

    $Verified = []; //use array() for versions below 5.5
    foreach($data as $key=>$value )
            {
                echo '<br>key '.$key;
                foreach($value as $k=>$v)
                {   
                    if(is_array($v)){
                        $Verified[$key]['number'] = $v['document']['number'];
                    }
                    $Verified[$key]['id'] = $v['id'];

Upvotes: 1

Amit Maan
Amit Maan

Reputation: 85

Please pass your array to this function

function arrayconvert($arr) {
  if (is_array($arr)) {
    foreach($arr as $k => $v) {
      if (is_array($v)) {
        arrayconvert($v);
      } else {
        $newarr[$k] = $v;
      }
    }
  }

  return $newarr;
}

Upvotes: 1

Related Questions