亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于另一個鍵的條件的數組遞歸替換?

基于另一個鍵的條件的數組遞歸替換?

PHP
POPMUISE 2024-01-19 10:12:04
我有一個深度未知的動態多維數組。key=>value我想根據另一個條件替換 a key=>value。例如,當is$settings[$cient_id]時,替換 的值。$form_id1f44537$data = array (  0 =>   array (    'id' => '2cd5985',    'elType' => 'section',    'settings' => array(),    'elements' => array (      0 => array (        'id' => '88063e6',        'elType' => 'column',        'settings' => array(),        'elements' => array (          0 =>           array (            'id' => '1f44537',            'elType' => 'widget',            'settings' => array (              'ap_google_sheet_client_id' => 'test_id',            ),            'elements' => array (            ),            'widgetType' => 'form',          ),        )      ),      1 => array (        'id' => '7878c73',        'elType' => 'column',        'settings' => array(),        'elements' => array (          0 =>           array (            'id' => '1f44537',            'elType' => 'widget',            'settings' => array (              'ap_google_sheet_client_id' => 'test_id',            ),            'elements' => array (            ),            'widgetType' => 'form',          ),        )      ),    ),  ),);這是我不成功的嘗試嘗試1public function replace_recursive( $elements, $form_id ) {        foreach ( $elements as &$element) {            if ( $element['id'] === $form_id ) {                $element['settings']['ap_google_sheet_client_id'] = 'replaced';                return $elements;            }            if ( ! empty( $element['elements'] ) ) {                $elements = self::replace_recursive( $element['elements'], $form_id );                if ( $elements ) {                    return $elements;                }            }        }    }
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

正如您所說,代碼正在正確替換該值。只是您當前正在返回$elements從遞歸調用返回的值。但這是一個比整個數組更小的數組,因此您不應該將該數組進一步向上冒泡。


相反,只需將該結果注入到“elements”鍵處的當前包裝數組中,然后返回結果數組:


$data = [[

    'id' => '2cd5985',

    'elements' => [[

        'id' => '88063e6',

        'elements' => [[

            'id' => '1f44537',

            'settings' => [

                'form_name' => 'New Form',

                'form_fields' => [[

                    'custom_id' => 'name',

                    'field_label' => 'Name',

                    'placeholder' => 'Name',

                    '_id' => '948d900',

                    'field_pattern_message' => 'Please match the requested format',

                ],

                [

                    'custom_id' => 'email',

                    'field_type' => 'email',

                    'required' => 'true',

                    'field_label' => 'Email',

                    'placeholder' => 'Email',

                    '_id' => '243a095',

                    'field_pattern_message' => 'Please match the requested format',

                ]],

                'ap_google_sheet_client_id' => '',

            ],

            'elements' => [],

            'widgetType' => 'form',

        ]],

        'isInner' => false,

    ]],

    'isInner' => false,

]];


function replace_recursive( $elements, $form_id ) {

    foreach ( $elements as &$element) {

        if ( $element['id'] === $form_id ) {

            $element['settings']['ap_google_sheet_client_id'] = 'replaced';

            return $elements;

        }


        if ( ! empty( $element['elements'] ) ) {

            $subelements = replace_recursive( $element['elements'], $form_id );

            if ( $subelements ) { 

                // Inject result back into our array

                $element["elements"] = $subelements; 

                return $elements;

            }

        }

    }

}

    

$res = replace_recursive( $data, "1f44537");

var_dump($res);

請參閱此沙箱中的另一個輸入示例

在第二次嘗試中,您將return循環的外部放置起來。但這意味著你總是返回數組。然而,您需要以某種方式指示更換是否發生。當您沒有替換值時最好返回null,并且僅在替換時返回完整數組。否則,您沒有任何跡象表明您何時可以停止進一步尋找。


查看完整回答
反對 回復 2024-01-19
  • 1 回答
  • 0 關注
  • 122 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號