Php 将foreach重构为函数式编程
为了可读性,我正在将一些代码重构为函数式编程,我遇到了一个数组问题。我想将对象数组更改为具有值数组的简单数组 第一个数组如下所示:Php 将foreach重构为函数式编程,php,foreach,functional-programming,array-map,Php,Foreach,Functional Programming,Array Map,为了可读性,我正在将一些代码重构为函数式编程,我遇到了一个数组问题。我想将对象数组更改为具有值数组的简单数组 第一个数组如下所示: array(2) { [5701]=> object(stdClass)#123 (3) { ["id"]=> string(4) "5701" ["username"]=> string(6) "s67688" ["state"]=> string(6) "Inactive"
array(2) {
[5701]=>
object(stdClass)#123 (3) {
["id"]=>
string(4) "5701"
["username"]=>
string(6) "s67688"
["state"]=>
string(6) "Inactive"
}
[5762]=>
object(stdClass)#136 (3) {
["id"]=>
string(4) "5762"
["username"]=>
string(6) "s67701"
["state"]=>
string(6) "Active"
}
}
array(2) {
[0]=>
array(3) {
[0]=>
id(4) 5701
[1]=>
string(6) "s67688"
[2]=>
string(8) "Inactive"
}
[1]=>
array(3) {
[0]=>
int(4) 5762
[1]=>
string(6) "s67701"
[2]=>
string(8) "Active"
}
}
我想把它转换成这样的东西:
array(2) {
[5701]=>
object(stdClass)#123 (3) {
["id"]=>
string(4) "5701"
["username"]=>
string(6) "s67688"
["state"]=>
string(6) "Inactive"
}
[5762]=>
object(stdClass)#136 (3) {
["id"]=>
string(4) "5762"
["username"]=>
string(6) "s67701"
["state"]=>
string(6) "Active"
}
}
array(2) {
[0]=>
array(3) {
[0]=>
id(4) 5701
[1]=>
string(6) "s67688"
[2]=>
string(8) "Inactive"
}
[1]=>
array(3) {
[0]=>
int(4) 5762
[1]=>
string(6) "s67701"
[2]=>
string(8) "Active"
}
}
使用简单的foreach很容易实现,但当我尝试以下代码时:
$newArr = array_map(function($value){
return array_values(get_object_vars($value));
}, $baseArr);
输出如下:
array(2) {
[5701]=>
array(3) {
[0]=>
id(4) 5701
[1]=>
string(6) "s67688"
[2]=>
string(8) "Inactive"
}
[5762]=>
array(3) {
[0]=>
int(4) 5762
[1]=>
string(6) "s67701"
[2]=>
string(8) "Active"
}
}
正如您所看到的,基本数组键没有改变,为什么会发生这种情况
这是原始的foreach,它返回我想要的:
$newArr = [];
foreach ($baseArr as $value) {
$newArr[] = array_values(get_object_vars($user));
}
我还尝试了array\u walk。array\u map对值应用回调,而不修改键。我还通过强制转换到
数组
,简化了获取值的过程:
$newArr = array_values(array_map(function($v){
return array_values((array)$v);
}, $baseArr));
您可以在如上所述之后或之前使用数组_值
:
$newArr = array_map(function($v){
return array_values((array)$v);
}, array_values($baseArr));
我个人会将其保留为关联数组:
$newArr = array_values(array_map(function($v){ return (array)$v; }, $baseArr));
如果您可以使用库,那么使用 注意我是那个图书馆的作者