为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
至尊宝的传说 2023-09-08 16:53:09
我需要帮助修改数组以达到所需的结构。很抱歉示例结构可能很大,但我想更好地展示该结构。我有一个如下所示的目标数组,我需要生成[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 数组添加到彼此下方,而不是按照上面预期的方式进行更新。以下是我最终的结局。
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

通常你会使用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 直到该值不再是数组。注意&&$resultarray_join. 我们传递数组中当前位置的引用。

为了充分利用parse_str我还通过附加添加了该值=<value>

工作示例

为您的下一篇文章提供专业提示。使用var_export给我们一个数组,可以将其复制粘贴为代码:)

编辑

更简单的解决方案,带有“邪恶”输入的转义值。

foreach ($mainArray as $entry)

{

    $stringVarArray[] = $entry['name'] . '=' . urlencode($entry['value']);

}

parse_str(implode('&', $stringVarArray), $result);


var_dump($result);

工作示例



查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信