[英]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.