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

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

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 關注
  • 122 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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