[英]PHP : flatten array - fastest way?
是否有任何快速的方法可以在不運行foreach循環的情況下展平數組並選擇子鍵(在這種情況下為'key'&'value'),還是foreach始終是最快的方法?
Array
(
[0] => Array
(
[key] => string
[value] => a simple string
[cas] => 0
)
[1] => Array
(
[key] => int
[value] => 99
[cas] => 0
)
[2] => Array
(
[key] => array
[value] => Array
(
[0] => 11
[1] => 12
)
[cas] => 0
)
)
至:
Array
(
[int] => 99
[string] => a simple string
[array] => Array
(
[0] => 11
[1] => 12
)
)
試一下:
$ret = array();
while ($el = each($array)) {
$ret[$el['value']['key']] = $el['value']['value'];
}
call_user_func_array("array_merge", $subarrays)
可用於“展平”嵌套數組。
您想要的是完全不同的東西。 您可以將array_walk()
與回調一起使用,以將數據提取為所需的格式。 但是不,foreach循環仍然更快。 否則,沒有array_*
方法可以實現您的結構。
希望它會對其他人有所幫助,但這是我用來展寬數組並使嵌套元素更易於訪問的函數。
此處的用法和說明: https : //totaldev.com/flatten-multiDimension-arrays-php/
功能:
// Flatten an array of data with full-path string keys
function flat($array, $separator = '|', $prefix = '', $flattenNumericKeys = false) {
$result = [];
foreach($array as $key => $value) {
$new_key = $prefix . (empty($prefix) ? '' : $separator) . $key;
// Make sure value isn't empty
if(is_array($value)) {
if(empty($value)) $value = null;
else if(count($value) == 1 && isset($value[0]) && is_string($value[0]) && empty(trim($value[0]))) $value = null;
}
$hasStringKeys = is_array($value) && count(array_filter(array_keys($value), 'is_string')) > 0;
if(is_array($value) && ($hasStringKeys || $flattenNumericKeys)) $result = array_merge($result, flat($value, $separator, $new_key, $flattenNumericKeys));
else $result[$new_key] = $value;
}
return $result;
}
這應該將數組與整數鍵正確組合。 如果鍵是連續的並且從零開始,則將其刪除。 如果在平面數組中尚不存在整數鍵,它將保持原樣;否則,它將保持不變。 這應該主要保留不連續的數組。
function array_flatten(/* ... */)
{
$flat = array();
array_walk_recursive(func_get_args(), function($value, $key)
{
if (array_key_exists($key, $flat))
{
if (is_int($key))
{
$flat[] = $value;
}
}
else
{
$flat[$key] = $value;
}
});
return $flat;
}
您可以使用!isset($key)
或empty($key)
來代替有用的值。
這是更簡潔的版本:
function array_flatten(/* ... */)
{
$flat = array();
array_walk_recursive(func_get_args(), function($value, $key) use (&$flat)
{
$flat = array_merge($flat, array($key => $value));
});
return $flat;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.