从多维数组或数组中构建一个映射(键-值 的形式)
通过“$from”和“$to”参数指定对应的键值或属性名称来设置的映射关系。
当然也可以根据分组字段“$group”来进一步分组的映射。
举个例子:
$array = [
['id' => '123', 'name' => 'aaa', 'class' => 'x'],
['id' => '124', 'name' => 'bbb', 'class' => 'x'],
['id' => '345', 'name' => 'ccc', 'class' => 'y'],
];
上面的数组执行以下方法
1
|
$result
= ArrayHelper::map(
$array
,
'id'
,
'name'
);
|
得到的结果是
[
'123' => 'aaa',
'124' => 'bbb',
'345' => 'ccc',
]
还可以添加第四个参数
1
|
$result
= ArrayHelper::map(
$array
,
'id'
,
'name'
,
'class'
);
|
得到的结果是
[
'x' => [
'123' => 'aaa',
'124' => 'bbb',
],
'y' => [
'345' => 'ccc',
],
]
下面是map方法的详细代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/**
* @paramarray $array
* @param string|Closure $from
* @param string|Closure $to
* @param string|Closure $group
* @return array
*/
public
static
function
map(
$array
,
$from
,
$to
,
$group
= null)
{
$result
= [];
foreach
(
$array
as
$element
) {
$key
=
static
:: getValue(
$element
,
$from
);
$value
=
static
:: getValue(
$element
,
$to
);
if
(
$group
!== null) {
$result
[
static
:: getValue(
$element
,
$group
)][
$key
] =
$value
;
}
else
{
$result
[
$key
] =
$value
;
}
}
return
$result
;
}
|