многомерный массив php в одномерный массив

0

У меня есть массив

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"
  }
}

Я хотел сделать свой массив следующим:

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

Я пытаюсь использовать этот код, но не работает

$results = array();

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

Как эффективно преобразовывать массивы

  • 1
    array_column если у вас PHP 5.5 или выше
Теги:
arrays

5 ответов

5

Попробуйте с помощью array_map.

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

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

Кстати, если вы все еще хотите сделать это по-своему, попробуйте эту форму foreach:

$results = array ();
foreach ($inner as $key => $value)
    $results[$key] = $value['id'];
2

Хорошо, я видел много ответов, поэтому я подумал, что лучше ответить.

<?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);                                                

На моем компьютере эти выходы:

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

Вывод:

array_column является ультраэффективным (но PHP 5. 5+). Написание простого foreach кажется довольно эффективным.

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)
//}
0

Попробуй это:

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

$results = array();

foreach ($array as $value)
{
    foreach($value as $innerValue)
    {
        $results[] = $innervalue;
    }
}
0

Вы можете попробовать с помощью кода ниже. Я думаю, что это работает нормально.

Процесс 1: -

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

Процесс 2: -

Попробуйте:

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

foreach ( $input as $data ) {
  $output = array_merge($output, $data);
}
  • 0
    Примечание к версии: Итератор требует PHP 5.0.0+

Ещё вопросы

Сообщество Overcoder
Наверх
Меню