Hướng dẫn php change value in multidimensional array - php thay đổi giá trị trong mảng đa chiều

Tôi có một mảng trông như thế này

$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
        )
    }

Tôi muốn cập nhật mảng để thay đổi "Widget hứa hẹn" thành 800 thay vì 300.

Lưu ý rằng thứ tự của mảng này là tùy ý, có nghĩa là tôi cần cập nhật giá trị dựa trên giá trị tên "sản phẩm" (không phải trên số của nó trong mảng).

Tôi đã cố gắng truy cập nó thông qua số trong mảng nhưng nhận ra rằng điều đó sẽ không hoạt động vì lý do đó và tôi không chắc chắn làm thế nào để thay đổi giá trị của một yếu tố của một mảng đa chiều dựa trên một yếu tố khác.

Cảm ơn vì bất kì sự giúp đỡ.

Hướng dẫn php change value in multidimensional array - php thay đổi giá trị trong mảng đa chiều

Danny

7.2398 Huy hiệu vàng44 Huy hiệu bạc70 Huy hiệu đồng8 gold badges44 silver badges70 bronze badges

hỏi ngày 16 tháng 4 năm 2012 lúc 18:57Apr 16, 2012 at 18:57

3

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

Vì vậy, bạn lặp qua mảng, tìm giá trị bạn muốn, sau đó thay đổi nó. &$value là như vậy mảng được truyền qua tham chiếu. Có nghĩa là chúng ta có thể chỉnh sửa trực tiếp các giá trị trong mảng từ vòng lặp mà không cần phải làm $array[$key]['Value'].

Đã trả lời ngày 16 tháng 4 năm 2012 lúc 19:00Apr 16, 2012 at 19:00

gen_Ericgen_Ericgen_Eric

Phù bằng vàng 218K4040 gold badges297 silver badges335 bronze badges

1

Tôi nghĩ rằng bạn phải lặp đi qua chúng, một cái gì đó như:

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

Đã trả lời ngày 16 tháng 4 năm 2012 lúc 19:00Apr 16, 2012 at 19:00

Hướng dẫn php change value in multidimensional array - php thay đổi giá trị trong mảng đa chiều

Phù bằng vàng 218K40Nick

Tôi nghĩ rằng bạn phải lặp đi qua chúng, một cái gì đó như:2 gold badges29 silver badges47 bronze badges

0

Biệt danh

array_walk_recursive($array, 'updateValue');

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

6.2782 Huy hiệu vàng29 Huy hiệu bạc47 Huy hiệu đồng

Tôi nghĩ rằng hầu hết các cách tiếp cận phổ quát là sử dụng chức năng Array_Walk_Recursive như thế:Sep 1, 2014 at 15:09

Hướng dẫn php change value in multidimensional array - php thay đổi giá trị trong mảng đa chiều

Bằng cách này ngay cả khi bạn sẽ thay đổi mảng của mình sau này về chức năng này vẫn sẽ hoạt động tốt.jmarceli

Đã trả lời ngày 1 tháng 9 năm 2014 lúc 15:095 gold badges66 silver badges63 bronze badges

1

Jmarcelijmarceli

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", $_ );
        }
    }
}

18.2K5 Huy hiệu vàng66 Huy hiệu bạc63 Huy hiệu ĐồngMay 7, 2014 at 11:24

Hướng dẫn php change value in multidimensional array - php thay đổi giá trị trong mảng đa chiều

Câu trả lời này có thể là quá muộn, nhưng tôi đã phải đối mặt với một vấn đề tương tự mà tôi đã giải quyết bằng cách sử dụng chức năng nàyAbu Romaïssae

Đã trả lời ngày 7 tháng 5 năm 2014 lúc 11:245 gold badges35 silver badges59 bronze badges

Abu Romaïssaebu Romaïssae

3.7815 huy hiệu vàng35 huy hiệu bạc59 Huy hiệu đồng

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);
        }
    });
}

Đối với những người mong đợi một mảng phức tạp nhất, hãy sử dụng chức năng đệ quy để trải qua tất cả các yếu tố

(Giả sử chức năng này nằm trong một lớp PHP, sau đó)Feb 5, 2019 at 16:17

Hướng dẫn php change value in multidimensional array - php thay đổi giá trị trong mảng đa chiều

Chức năng này sẽ tái tạo mảng hiện cóTheva

Đã trả lời ngày 5 tháng 2 năm 2019 lúc 16:178 silver badges15 bronze badges