簡體   English   中英

在PHP中更新多維數組

[英]Updating a Multidimensional Array in PHP

我有一個看起來像這樣的數組

$array =
    Array
    (
    [0] => Array
        (
            [Product] =>  Amazing Widget
            [Value] => 200
        )

    [1] => Array
        (
            [Product] => Super Amazing Widget
            [Value] => 400
        )

    [2] => Array
        (
            [Product] =>  Promising Widget 
            [Value] => 300
        )

    [3] => Array
        (
            [Product] => Superb Widget
            [Value] => 400
        )
    }

我想更新數組,將“ Promising Widget”更改為800,而不是300。

請注意,此數組的順序是任意的,這意味着我需要根據“產品”名稱值(而不是數組中的數字)更新Value。

我試圖通過數組中的數字訪問它,但是意識到由於這個原因它是行不通的,而且我不確定如何基於多維數組更改一個多維數組的一個元素的值。

謝謝你的幫助。

foreach($array as &$value){
    if($value['Product'] === 'Promising Widget'){
        $value['Value'] = 800;
        break; // Stop the loop after we've found the item
    }
}

因此,您遍歷數組,找到所需的值,然后更改它。 &$value是數組,因此該數組通過引用傳遞。 意味着我們可以直接從循環中編輯數組中的值,而不必執行$array[$key]['Value']

我認為您必須遍歷它們,例如:

foreach ($array as $k => $v) {
  if ($v['Product']=='Promising Widget') {
    $array[$k]['Value']=800;
  }
}

我認為最通用的方法是像這樣使用array_walk_recursive函數:

array_walk_recursive($array, 'updateValue');

function updateValue(&$data, $key) {
  if($key == 'Promising Widget') {
    $data = 800;
  }
}

這樣,即使稍后要在此函數上更改數組,仍然可以正常工作。

這個答案可能為時已晚,但我遇到了使用此功能解決的類似問題

function r_search_and_replace( &$arr ) {
    foreach ( $arr as $idx => $_ ) {
        if( is_array( $_ ) ) r_search_and_replace( $arr[$idx] );
        else {
            if( is_string( $_ ) ) $arr[$idx] = str_replace( "PATTERN", "REPLACEMENT", $_ );
        }
    }
}

對於那些期望使用最復雜數組的人,請使用遞歸函數遍歷所有元素

(假設此函數在php類中,則)

public function reGenerateArray(&$arr)
{
    array_walk($arr, function (&$v, $k ) {
        if($k === 'KEY_NAME') {
            $v['OTHER_KEY'] = $newValueToReplace;
        } elseif("array" == gettype($v)) {
            $this->reGenerateArray($v);
        }
    });
}

此函數將重現現有數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM