Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将foreach重构为函数式编程_Php_Foreach_Functional Programming_Array Map - Fatal编程技术网

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));

如果您可以使用库,那么使用

注意我是那个图书馆的作者