首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >array_walk试图写入外部数组

array_walk试图写入外部数组
EN

Stack Overflow用户
提问于 2017-08-11 21:39:30
回答 3查看 1K关注 0票数 2

我有一段简单的代码不能像我预期的那样工作,请有人解释一下为什么它没有填充字段数组,以及如何解决它。

代码语言:javascript
运行
复制
$fields = [];

array_walk($class->properties, function($v, $k) use ($fields) {
    $fields[] = $v->name;
});

die(var_dump($fields));

// output is []
EN

回答 3

Stack Overflow用户

发布于 2017-08-11 21:42:27

用这个:

代码语言:javascript
运行
复制
$fields = [];

array_walk($class->properties, function($v, $k) use (&$fields) {
    $fields[] = $v->name;
});

die(var_dump($fields));

写完这篇文章后,我看到了马克·贝克的评论。这是正确的答案。

关于参考,见:

票数 3
EN

Stack Overflow用户

发布于 2017-08-11 22:16:41

或者,您可以使用array_map()

代码语言:javascript
运行
复制
$fields = array_map(function($v) {
    return $v->name;
}, $class->properties);

die(var_dump($fields));

关于参考,见:

票数 1
EN

Stack Overflow用户

发布于 2017-08-12 00:48:29

下面的代码演示了一个类,它的唯一属性属性包含一个对象数组,每个对象都有一个name属性,如下所示:

代码语言:javascript
运行
复制
<?php

$class = new stdClass;
$class->properties = [new stdClass,new stdClass, new stdClass];

$class->properties[0]->name = "Anne";
$class->properties[1]->name = "Bob";
$class->properties[2]->name = "Robin";

$fieldsA = [];
$fieldsB = [];

if ( array_walk( $class->properties, function( $o ) use ( &$fieldsA ){ 
                                      $fieldsA[] = $o->name;
                                    }) ) {
   echo "\nMission accomplished:\n";
   var_dump($fieldsA);
}

$fieldsB = array_map(  function( $e ) {
                                      return $e->name;
                                      },$class->properties);
if (count($fieldsB) > 0) {
   echo "\nMission accomplished:\n";
   var_dump( $fieldsB );
}

请参阅活码

正如您可能注意到的,步行()地图()都会产生相同的结果,用三个对象包含的名称填充一个新数组。Array_map()提供了比array_walk()更简单的功能,后者需要一个use变量和一个引用操作符。此外,如果一切顺利,array_map()的返回值是一个全新的数组。因此,我同意@localheinz,并推荐它作为更好的选择。

注意:关于回调,没有必要指定值、键参数。这两个内置函数都检查属性的每个元素。如果代码需要使用元素的键进行操作,那么指定function( $v, $k )将很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45644155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档