PHP5.3以上 用到了array_map 使用匿名函数进行处理
代码:
<?php
function array_col($arr = array(), $idx = 0, $newidx = 0)
{
if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
return array_column($arr, $idx, $newidx);
} else {
return array_map(function($element) use($idx, $newidx) {
$ret_arr = array();
$tmp = !is_array($idx) && is_int(strpos($idx, ',', 1))?explode(',', $idx):0;
$ntmp = !is_array($newidx) && is_int(strpos($newidx, ',', 1))?explode(',', $newidx):0;
if (empty($tmp)) {
return $ret_arr;
}
$tmpc_idx = count($tmp);
$tmpc_newidx = count($ntmp);
if (is_int($ntmp) || empty($ntmp)) {
for ($i=0; $i < $tmpc_idx; $i++) {
$ret_arr[]=$element[$tmp[$i]];
}
} else {
if ($tmpc_newidx>=$tmpc_idx) {
for ($i=0; $i < $tmpc_newidx; $i++) {
$ret_arr[$element[$ntmp[$i]]]=$element[$tmp[$i]];
}
}
}
return $ret_arr;
}, $arr);
}
} $a = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
)
); var_export( array_col($a, 'id,last_name','first_name,first_name')); ?>
output:
<?php
array (//覆盖掉了
0 =>
array (
'John' => 'Doe',
),
1 =>
array (
'Sally' => 'Smith',
),
)
?>
new ONE
<?php
function array_col($arr = array(), $idx = array(), $newidx = array(), $pfx = 'var_', $sp = '+')
{
if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
return array_column($arr, $idx, $newidx);
} else {
return array_map(function($element) use($idx, $newidx, $sp, $pfx) {
$ret_arr = array();
$tmp = !is_array($idx)?explode(',', $idx):array();
$ntmp = !is_array($newidx)?explode(',', $newidx):array();
$tmpc_idx = count($tmp);
$tmpc_newidx = count($ntmp);
if (is_int($ntmp) || empty($ntmp)) {
for ($i=0; $i < $tmpc_idx; $i++) {
$ret_arr[]=$element[$tmp[$i]];
}
} else {
$ele_keys = array_keys($element);
if (!empty($tmp) && $tmpc_newidx>=$tmpc_idx) {
for ($i=0; $i < $tmpc_newidx; $i++) {
$keys=explode('+', $ntmp[$i]);
if (empty($keys) || !in_array($tmp[$i], $ele_keys)) {
continue;
}
$ret_arr[$pfx . join($sp, array_intersect_key($element,array_flip($keys)))]=$element[$tmp[$i]];
}
}
}
return $ret_arr;
}, $arr);
}
}
?>