代码之家  ›  专栏  ›  技术社区  ›  Jessey Fransen

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

  •  0
  • Jessey Fransen  · 技术社区  · 6 年前

    我试图使用函数修改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;
    }
    

    打印结果:

    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 回复  |  直到 6 年前
        1
  •  0
  •   sietse85    6 年前

    我想这会解决你的问题:

    $layoutData[$key] = $this->$method($data);
    
        2
  •  0
  •   Jessey Fransen    6 年前

    改变

    $this->parseOptions($data);
    

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

    解决了问题。