Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
158 views
in Technique[技术] by (71.8m points)

PHP - concatenate ' checked' to each string value in multidimensional array using recursion

I have a multidimensional array in PHP, and want to concatenate a string onto each string element using recursion. The array is as follows:

$array = Array
(
    [p] => Array
        (
            [0] => This Porsche 993 Carrera Cabriolet represents a great opportunity to acquire an open-top variant of one of the most coveted 911 models.
            [1] => First registered on 5 August 1994, M912 SGY displays 10,630 miles on the odometer with a clock change at 66,244 miles in 2014.
            [2] => The car’s Aventura Green metallic paintwork is reported to be in good condition, presenting well for its age and mileage.
            [3] => The Marble Grey leather interior is believed to be entirely original.
            [4] => Serviced by Porsche specialist Portiacraft in July 2020 at 76,598 miles, this consisted of an annual oil and filter service.
            [5] => The last MOT was undertaken on 6 July 2020 at 76,598 miles.
            [6] => It is supplied with a Porsche Club Great Britain folder with records of main dealer and specialist service history.
            [7] => This Porsche 911 Carrera Cabriolet presents in highly original and well-maintained condition.
            [8] => Summary of maintenance history:
            [9] => Array
                (
                    [strong] => The description of this auction lot is, to the best of the seller's knowledge, accurate and not misleading.
                )

            [10] => Array
                (
                    [strong] =>  All UK-registered cars and motorbikes on Collecting Cars are run through an online HPI check. This vehicle shows no insurance database markers for damage or theft, and has no finance owing.
                )

        )

    [ul] => Array
        (
            [li] => Array
                (
                    [0] => 04/11/1996 – 16,120 miles
                    [1] => 18/11/1998 – 25,086 miles
                    [2] => 09/09/1999 – 28,769 miles
                    [3] => 21/02/2000 – 31,469 miles
                    [4] => 22/06/2001 – 36,055 miles
                    [5] => 29/10/2002 – 40,781 miles
                    [6] => 02/03/2005 – 46,238 miles
                    [7] => 24/03/2006 – 49,459 miles
                    [8] => 03/07/2007 – 53,051 miles
                    [9] => 17/12/2008 – 56,582 miles
                    [10] => 20/05/2010 – 57,385 miles
                    [11] => 08/06/2011 – 61,653 miles
                    [12] => 15/05/2012 – 64,425 miles
                    [13] => 17/04/2013 – 66,026 miles
                    [14] => 07/06/2014 – 66,244 miles
                    [15] => 14/09/2015 – 68,411 miles
                    [16] => 27/02/2018 – 74,856 miles
                    [17] => 06/08/2019 – ~76,400 miles
                    [18] => 06/07/2020 – 76,598 miles
                )

        )

)

Ideally, the result should look like this:

$array = Array
(
    [p] => Array
        (
            [0] => This Porsche 993 Carrera Cabriolet represents a great opportunity to acquire an open-top variant of one of the most coveted 911 models. checked
            [1] => First registered on 5 August 1994, M912 SGY displays 10,630 miles on the odometer with a clock change at 66,244 miles in 2014. checked
            [2] => The car’s Aventura Green metallic paintwork is reported to be in good condition, presenting well for its age and mileage. checked
            [3] => The Marble Grey leather interior is believed to be entirely original. checked
            [4] => Serviced by Porsche specialist Portiacraft in July 2020 at 76,598 miles, this consisted of an annual oil and filter service. checked
            [5] => The last MOT was undertaken on 6 July 2020 at 76,598 miles. checked
            [6] => It is supplied with a Porsche Club Great Britain folder with records of main dealer and specialist service history. checked
            [7] => This Porsche 911 Carrera Cabriolet presents in highly original and well-maintained condition. checked
            [8] => Summary of maintenance history: checked
            [9] => Array
                (
                    [strong] => The description of this auction lot is, to the best of the seller's knowledge, accurate and not misleading. checked
                )

            [10] => Array
                (
                    [strong] =>  All UK-registered cars and motorbikes on Collecting Cars are run through an online HPI check. This vehicle shows no insurance database markers for damage or theft, and has no finance owing. checked
                )

        )

    [ul] => Array
        (
            [li] => Array
                (
                    [0] => 04/11/1996 – 16,120 miles checked
                    [1] => 18/11/1998 – 25,086 miles checked
                    [2] => 09/09/1999 – 28,769 miles checked
                    [3] => 21/02/2000 – 31,469 miles checked
                    [4] => 22/06/2001 – 36,055 miles checked
                    [5] => 29/10/2002 – 40,781 miles checked
                    [6] => 02/03/2005 – 46,238 miles checked
                    [7] => 24/03/2006 – 49,459 miles checked
                    [8] => 03/07/2007 – 53,051 miles checked
                    [9] => 17/12/2008 – 56,582 miles checked
                    [10] => 20/05/2010 – 57,385 miles checked
                    [11] => 08/06/2011 – 61,653 miles checked
                    [12] => 15/05/2012 – 64,425 miles checked
                    [13] => 17/04/2013 – 66,026 miles checked
                    [14] => 07/06/2014 – 66,244 miles checked
                    [15] => 14/09/2015 – 68,411 miles checked
                    [16] => 27/02/2018 – 74,856 miles checked
                    [17] => 06/08/2019 – ~76,400 miles checked
                    [18] => 06/07/2020 – 76,598 miles checked
                )

        )

)

I have tried the following:

$addedChecked = $this->addCheckedRecursive($array);

private function addCheckedRecursive($array)
    {
        if(!is_array($array)) {
            return $array . ' checked';
        }

        foreach($array as $v) {
            $this->addCheckedRecursive($v);
        }
    }

and also

$addedChecked = array_walk_recursive($array, function (&$value) {
            $value .= ' checked';
        });

The latter simply returned true.

For info, every element of each array will always be a string, and I would also like to preserve the current array structure. Any help is appreciated.

question from:https://stackoverflow.com/questions/65935923/php-concatenate-checked-to-each-string-value-in-multidimensional-array-usin

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

There is an in-built function that you can use to achieve what you want. If you use array_walk_recursive as follows:

// Say you have your array $xmlArray
array_walk_recursive($xmlArray, function (&$value) {
    $value .= ' checked';
});

// Since $xmlArray is now modified (in place)
echo '<pre>';
print_r($xmlArray);
echo '</pre>';

In case you would not want $xmlArray to be changed as a side effect, could assign a value copy of the array to a new variable.

$addedChecked = $xmlArray;
array_walk_recursive($addedChecked, function (&$value) {
    $value .= ' checked';
});

// Since $addedChecked is now modified (in place)
echo '<pre>';
print_r($addedChecked);
echo '</pre>';

The function takes in the array by reference and will thus modify the array directly as a side effect of the function. This is one important thing to note, it does not return an array, but only whether the function was successfully executed on the array you gave it.

This will loop over each key => value pair and do so recursively if the value is of type array. You can simply concatenate to the value (where we pass value by reference) to update it with checked.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...