【问题标题】:How to modify an array using a function in a foreach loop?如何使用 foreach 循环中的函数修改数组?
【发布时间】:2019-03-09 14:20:34
【问题描述】:

我正在尝试使用函数修改 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'
            )

【问题讨论】:

标签: php arrays function multidimensional-array foreach


【解决方案1】:

我认为这将解决您的问题:

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

【讨论】:

  • 一个好的答案包括解释为什么它可以解决问题。但由于这个问题已经在这里被多次询问和回答,所以这个问题实际上应该作为重复关闭。
【解决方案2】:

变化

$this->parseOptions($data);

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

解决了这个问题。 菜鸟失误。

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 2021-08-03
    • 2013-04-26
    • 2015-08-23
    相关资源
    最近更新 更多