Мой вопрос в том, как я могу успешно сканировать все уровни этих сериализованных данных и записывать каждый уровень листа для разделения строк в файле, где каждая строка содержит массив «путь ключа» и значение. В принципе, мне нужно каждое значение, завернутое в функцию i18n для целей перевода.
У меня есть некоторые сериализованные данные в базе данных mySQL, вот пример проблемного значения:
stdClass Object ( {...} [fields] => Array ( [0] => stdClass Object ( {...} [choices] => Array ( [0] => stdClass Object ( [text] => My string [value] => 7 [isSelected] => [price] => ) ) {...}
Ожидаемым результатом является каждое значение листьев, записанное в файл PHP с его ключевым hierearchy, таким образом, поэтому я могу переконвертировать его в массив:
$form['fields'][0]['choices'][0]['text'] = __( "My string", "tjxgallery" );
И вот мой код, который пытается сделать это
$iterator = new RecursiveIteratorIterator( new RecursiveArrayIterator( $form_fields ) ); $strings_to_translate = array( '<?php' . PHP_EOL ); foreach ( $iterator as $key => $value ) { // Fields to skip, as they don't contain any translatable strings $unwanted_fields = array( 'inputName', 'type', 'size', 'inputType', 'descriptionPlacement', 'postCustomFieldName', 'allowedExtensions', 'actionType', 'operator', 'logicType', 'conditionalLogic', ); // Only proceed if array item is a string and it's not empty and it's not a number and it's not in the ignored fields if ( ! in_array( $key, $unwanted_fields ) && ( is_string( $value ) && ( 0 < strlen( $value ) ) && ! is_numeric( $value ) ) ) { // Iterate through the sub arrays for ( $i = $iterator->getDepth() - 1; $i >= 0; $i -- ) { $path = ''; // get the parent key of current item $subkey = $iterator->getSubIterator( $i )->key(); // Build a string with the full key path - eg [0]['choices'][0]['text'] if ( is_numeric( $subkey ) ) { if ( empty( $path ) ) { $path = '[' . $subkey . '][\'' . $key; } else { $path = '[' . $subkey . ']' . $key; } } else { if ( empty( $path ) ) { $path = '[\'' . $subkey . '\'][\'' . $key; } else { $path = '[\'' . $subkey . '\']' . $key; } } } // Build an array of translation ready strings eg $form['fields'][0]['text'] = __( "Give Up Clothes For Good – Cancer Research UK", "tjxgallery" ); $strings_to_translate[] = '$form[\'fields\']' . $path . '\'] = __( "' . preg_replace( "/\n/", '', $value ) . '", "tjxgallery" );' . PHP_EOL; }
В результате я получаю следующее: $ form ['fields'] [0] ['text'] = __ («Моя строка», «tjxgallery»);
Таким образом, отсутствует ['choices'][0]
.
Любая помощь оценивается
Спасибо за ваше время