猿问

PHP 修改多维数组以更新值而不是添加到末尾

我需要帮助修改数组以达到所需的结构。很抱歉示例结构可能很大,但我想更好地展示该结构。


我有一个如下所示的目标数组,我需要生成


[bf_1040242] => Array

                (

                    [326] => Just some Information.  Additional Text

                    [17565] => Array

                        (

                            [0] => 2

                            [1] => 1

                            [2] => 3

                        )


                    [other] => Array

                        (

                            [17565] => Testing

                            [28623] => 

                            [42284] => Something Else

                        )


                    [597] => 1

                    [327] => This is some text

                    [328] => asdasd

                    [11880] => wwwww

                    [329] => xxxxx

                    [28622] => 2

                    [42283] => 1

                    [42284] => Array

                        (

                            [0] => 2

                            [1] => 3

                            [2] => 4

                        )

我生成的数据采用不同的格式,其中这些值的结构采用字符串形式。

在上面的数组中,键“name”代表字符串格式的单个数组的结构,“value”保存数组结构需要更新为的值。


这是通过使用成功完成的


$extra = []


foreach ($mainArray as $key => $value)

{

    parse_str($value['name'], $tempArr);

    $m = $this->multiArr($k, $value);

    array_push($extra, $m);

}



protected function multiArr($k, $val)

{

    foreach($k as $key => $value)

    {

        if(is_array($value) ) $k[$key] =  $this->multiArr($k[$key], $val);


        if(!is_array($value))

        {

            $k[$key] = (string) $val['value'];

        }

    }

    return $k;

}

$m 保存单个数组值,例如


Array

(

    [bf_1040242] => Array

        (

            [other] => Array

                (

                    [42284] => Something Else

                )


        )


)

使用这些单独的数组值,我想创建主要所需的数组,所以我使用


array_push($extra, $m);


但这会将每个 $m 数组添加到彼此下方,而不是按照上面预期的方式进行更新。以下是我最终的结局。


至尊宝的传说
浏览 106回答 1
1回答

慕森卡

通常你会使用array_merge_recursive来实现这一点,但它不会保留命名键,所以我写了一个小array_join函数来让生活更轻松:)function array_join($value, &$result) {    if (!is_array($value)) {        $result = $value;                return;    }        foreach ($value as $k => $v) {        array_join($v, $result[$k]);    }}$result = [];foreach ($mainArray as $entry){    parse_str($entry['name'] . '=' . $entry['value'], $nameArray);    array_join($nameArray, $result);}我们只需递归调用 array_join 直到该值不再是数组。注意&中&$result的array_join. 我们传递数组中当前位置的引用。为了充分利用parse_str我还通过附加添加了该值=<value>工作示例。为您的下一篇文章提供专业提示。使用var_export给我们一个数组,可以将其复制粘贴为代码:)编辑更简单的解决方案,带有“邪恶”输入的转义值。foreach ($mainArray as $entry){    $stringVarArray[] = $entry['name'] . '=' . urlencode($entry['value']);}parse_str(implode('&', $stringVarArray), $result);var_dump($result);工作示例。
随时随地看视频慕课网APP
我要回答