0

I have an array

array(5) {
  [0]=>
  array(1) {
    ["id"]=>
    string(1) "5"
  }
  [1]=>
  array(1) {
    ["id"]=>
    string(1) "6"
  }
  [2]=>
  array(1) {
    ["id"]=>
    string(1) "7"
  }
  [3]=>
  array(1) {
    ["id"]=>
    string(1) "8"
  }
  [4]=>
  array(1) {
    ["id"]=>
    string(1) "9"
  }
}

I wan to make my array like:

$registrationIDs = array( "5","6","7","8","9");

I am trying this code but not working

$results = array();

foreach($result as $inner) {
    $results[key($inner)] = current($inner);
}

How do I effeciently transform arrays like this

Raptor
  • 53,206
  • 45
  • 230
  • 366

5 Answers5

5

Try with array_map.

$results = array_map (function ($e) { return $e['id']; }, $inner);

http://php.net/manual/en/function.array-map.php

By the way, if you still want to do it your way, try this form of foreach :

$results = array ();
foreach ($inner as $key => $value)
    $results[$key] = $value['id'];
Niols
  • 627
  • 1
  • 4
  • 13
2
$array = [['id'=>1],['id'=>2],['id'=>3],['id'=>4],['id'=>5],];
$result = call_user_func_array('array_merge_recursive', $array);
var_dump($result['id']);
//array(5) {
//  [0] =>
//  int(1)
//  [1] =>
//  int(2)
//  [2] =>
//  int(3)
//  [3] =>
//  int(4)
//  [4] =>
//  int(5)
//}
sectus
  • 15,605
  • 5
  • 55
  • 97
2

Ok, I saw a lot of answers, so I wondered what to better answer was.

<?php                                                                    

$data = array ();                                                        
for ($i = 0; $i < 1000000; $i++)                                         
  $data[$i] = array ('id' => rand ());                                   

$time0 = microtime (true);                                               

// Niols (1)                                                             
$results = array_map (function ($e) { return $e['id']; }, $data);        
$time1 = microtime (true);                                               

// Niols (2)                                                             
$results = array ();                                                     
foreach ($data as $key => $value)                                        
  $results[$key] = $value['id'];                                       
$time2 = microtime (true);                                               

// User (1)                                                              
$it =  new RecursiveIteratorIterator(new RecursiveArrayIterator($data)); 
$results = iterator_to_array($it, false);                                
$time3 = microtime (true);                                               

// User (2)                                                              
$results = array();                                                      
foreach ($data as $datum)                                                
  $results = array_merge($results, $datum);                              
$time4 = microtime (true);                                               

// sectus                                                                
$results = call_user_func_array('array_merge_recursive', $data);         
$time5 = microtime (true);                                               

//  Pankaj katiyar and Ghost                                             
$results = array_column($data, 'id');                                    
$time6 = microtime (true);                                               

var_dump ($time1-$time0);                                                
var_dump ($time2-$time1);                                                
var_dump ($time3-$time2);                                                
var_dump ($time4-$time3);                                                
var_dump ($time5-$time4);                                                
var_dump ($time6-$time5);                                                

On my computer, this outputs :

float(0.62708687782288)
float(0.35285401344299)
float(1.5429890155792) 
float(0.7408618927002) 
float(0.70525908470154)
float(0.15015292167664)

Conclusion :

array_column is ultra-efficient (but PHP 5.5+). Writing a simple foreach seems quite efficient too.

Niols
  • 627
  • 1
  • 4
  • 13
0

You can try with below code. I think this is working fine.

Process 1:-

$it =  new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
$l = iterator_to_array($it, false);
var_dump($l); // one Dimensional 

Process 2:-

Try with:

$input  = array(/* your array*/);
$output = array();

foreach ( $input as $data ) {
  $output = array_merge($output, $data);
}
RaMeSh
  • 3,330
  • 2
  • 19
  • 31
0

Try this:

$array = array(/*your array*/);

$results = array();

foreach ($array as $value)
{
    foreach($value as $innerValue)
    {
        $results[] = $innervalue;
    }
}
Maris
  • 390
  • 2
  • 14