Я использовал этот скрипт, генерируя массив / json с 500 000 регистров:
<?php
ini_set('memory_limit', '-1');
set_time_limit(0);
for ($i = 0; $i < 500000; $i++) {
$response[] = [
'name' => uniqid(),
'topLevelDomain' => ['ve'],
'alpha2Code' => 'VE',
'alpha3Code' => 'VEN',
'callingCodes' => [58],
'capital' => 'Caracas',
'cioc' => 'VEN',
];
}
$response = json_encode($response);
//for
$time = microtime(true);
$data = json_decode($response);
$namesFor = [];
for($i = 0, $c = count($data); $i < $c; $i++) {
$namesFor[] = $data[$i]->name;
}
echo "<br/> Time with for loop: ";
echo microtime(true) - $time;
//array_column
$time = microtime(true);
$data = json_decode($response, true);
$namesArrayColumn = array_column($data, 'name');
echo "<br/> Time with array_column: ";
echo microtime(true) - $time;
//foreach
$time = microtime(true);
$data = json_decode($response);
$namesForeach = [];
foreach($data as $d) {
$namesForeach[] = $d->name;
}
echo "<br/> Time with foreach: ";
echo microtime(true) - $time;
//array_map
$time = microtime(true);
$data = json_decode($response);
$namesArrayMap = [];
$namesArrayMap = array_map(function($d) {
return $d->name;
}, $data);
echo "<br/> Time with array_map: ";
echo microtime(true) - $time;
И вывод
Время с для цикла: 2.0891849994659
Время с array_column: 7.5789909362793
Время с foreach: 6.3916020393372
Время с array_map: 7.6288249492645
Итак, for - самые быстрые, foreach, array_column и array_map методынамного медленнее.Но при работе с 100 000 регистров разница была минимальной:
Время с для цикла: 0,40081810951233
Время с array_column: 0,40819096565247
Время с foreach: 0,44123411178589
Время с array_map: 0.58325409889221
В любом случае, используйте for
, которое будет быстрее всегда.