如何在foreach循环中使用函数修改数组?

时间:2018-10-04 08:41:16

标签: php arrays function multidimensional-array foreach

我正在尝试使用函数在foreach循环内修改多维数组。 但是,当我使用print_r()检查结果时,结果不是我想要的结果,并且我也没有收到任何错误。

foreach ($layoutData as $key => $data) {

            $method = $data[ 'acf_fc_layout' ];

            if (method_exists($this, $method)) {
                $data = $this->$method($data);
            }

            $this->parseOptions($data);
}

注意:foreach位于一个名为layouts()的函数内。我认为这无关紧要,所以我把它排除在外了。

public function parseOptions($data) {

        if (isset($data[ 'padded' ])) {
            if ($data[ 'padded' ] == 'true') {
                $data[ 'options' ][ 'padded' ] = true;
            } else {
                $data[ 'options' ][ 'padded' ] = false;
            }
            unset($data[ 'padded' ]);
        }

        if (isset($data[ 'background-color' ])) {
            $data[ 'options' ][ 'background-color' ] = $data[ 'background-color' ];
            if ($data[ 'options' ][ 'background-color' ] == 'white') {
                $data[ 'options' ][ 'background-color' ] = false;
            }
            unset($data[ 'background-color' ]);
        }

        return $data;
}

print_r()结果:

Array
(
    [view] => signup
    [data] => Array
        (
            [acf_fc_layout] => signup
            [title] => Schrijf je snel in
            [text] => Kickstarten begint met aanmelden. Doe het snel, dan maak je kans op een Samsung Galaxy S9.
        )
   [padded] => 'true'
   [background-color] => 'dark-grey'
)

但是我想要实现的是:

Array
    (
        [view] => signup
        [data] => Array
            (
                [acf_fc_layout] => signup
                [title] => Schrijf je snel in
                [text] => Kickstarten begint met aanmelden. Doe het snel, dan maak je kans op een Samsung Galaxy S9.
            )
         [options] => Array
            (
                [padded] => 'true'
                [background-color] => 'dark-grey'
            )

2 个答案:

答案 0 :(得分:0)

我认为这可以解决您的问题:

$layoutData[$key] = $this->$method($data);

答案 1 :(得分:0)

更改

$this->parseOptions($data);

 $data = $this->parseOptions($data);

解决了问题。 新秀错误。