用另一个值动态替换多维数组中的值

时间:2018-10-08 19:40:41

标签: php arrays multidimensional-array

我在PHP中有一个多维数组,并尝试用该数组中的另一个值动态替换值。

这是一个例子:

$data =
array(356) {
  [0]=>
  array(6) {
    [0]=>
    string(3) "001"
    [1]=>
    string(19) "14.04.2018 14:00:00"
    [2]=>
    string(39) "mJA"
    [3]=>
    string(26) "JSG Handball"
    [4]=>
    string(13) "TSG Frankfurt"
    [5]=>
    string(52) "1410601539 Ground 1"
  }
  [1]=>
  array(6) {
    [0]=>
    string(3) "001"
    [1]=>
    string(19) "14.04.2018 14:00:00"
    [2]=>
    string(48) "wJB"
    [3]=>
    string(26) "SC Berlin"
    [4]=>
    string(10) "JSG Handball"
    [5]=>
    string(44) "1410601105 Ground 2"
  }
...
}

我需要实现的是,我想搜索整个数组,并用Array键[x] [2]中的字符串替换字符串“ JSG Handball”的任何发现。因此,在第二个发现中,在我的示例中,“ JSG手球”将替换为“ mJA”,而“ JSG手球”将替换为“ wJB”。

到目前为止,我所取得的成就(感谢这里的出色人士)是用array_walk_recursive进行的静态替换,但是我无法再进一步了。

array_walk_recursive($data, function(&$data) {      
    if($data == "JSG Handball") {
         $data = "Whatever";
    }
}); 

我们非常感谢您的帮助;) 预先感谢!

1 个答案:

答案 0 :(得分:0)

使用array_walk_recursive会为您提供每个项目的值和键,但不会为您提供这些键和值所在的当前数组。

您可以做的是使用foreach的2倍循环数组,并使用&通过引用传递以更新原始数组。

$data = [
    [
        "001",
        "14.04.2018 14:00:00",
        "mJA",
        "JSG Handball",
        "TSG Frankfurt",
        "1410601539 Ground 1",
    ],
    [
        "001",
        "14.04.2018 14:00:00",
        "wJB",
        "SC Berlin",
        "JSG Handball",
        "1410601105 Ground 2"
    ]
];

foreach ($data as &$d) {
    foreach ($d as &$item) {
        if ($item === "JSG Handball" && isset($d[2])) {
            $item = $d[2];
        }
    }
}

print_r($data);

Demo php