PHP - 为什么void函数没有转换数组

时间:2017-09-07 16:21:46

标签: php arrays

我有一个数组,我想在做一些过滤后添加另一个数组,我想使用一个void函数,但它没有对数组进行转换。

这是我的代码:

$report = [];

$firstHeaders = ['a','b','c'];
$fieldHeaders = ['d','e','f'];
$lastHeaders = ['x','y','z'];

$this->makeHeaders($report, $firstHeaders, $fieldHeaders, $lastHeaders);

var_dump($report);

private function makeHeaders($report, $firstHeaders, $fieldHeaders, $lastHeaders): void {
  foreach ($firstHeaders as $firstHeader) {
    array_push($report['headers'], $firstHeader);
  }
  foreach ($fieldHeaders as $fieldHeader) {
    array_push($report['headers'], $fieldHeader);
  }
  foreach ($lastHeaders as $lastHeader) {
    array_push($report['headers'], $lastHeader);
  }  
}

当我想要的是以下时,var_dump给了我一个空数组:

$report['headers'] = ['a','b','c','d','e','f','x','y','z']

如果返回类型是数组但是为什么void函数不起作用我可以使它工作?

2 个答案:

答案 0 :(得分:5)

使用$report

定义要通过引用传递的&
private function makeHeaders(&$report, $firstHeaders, $fieldHeaders, $lastHeaders): void {

请参阅PHP: Passing by Reference

或者,如果您将$report定义为类变量,那么您只需要:

private function makeHeaders($firstHeaders, $fieldHeaders, $lastHeaders): void {

要访问它,如:

array_push($this->report['headers'], $firstHeader);

或没有array_push()

$this->report['headers'][] = $firstHeader;

但是,根据您的数组键,这可以在没有循环的情况下执行:

$report["headers"] = array_merge($firstHeaders,
                                 $fieldHeaders,
                                 $lastHeaders);

答案 1 :(得分:0)

我感谢这不是一个直接的答案,但作为另一种考虑,可以使用array_merge()

$report = [];

$firstHeaders = ['a','b','c'];
$fieldHeaders = ['d','e','f'];
$lastHeaders = ['x','y','z'];

$report["headers"] = array_merge($firstHeaders,$fieldHeaders,$lastHeaders);

var_dump($report);

结果

array(1) {
  ["headers"]=>
  array(9) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
    [3]=>
    string(1) "d"
    [4]=>
    string(1) "e"
    [5]=>
    string(1) "f"
    [6]=>
    string(1) "x"
    [7]=>
    string(1) "y"
    [8]=>
    string(1) "z"
  }
}