如何根据同一多维数组中的另一个值找到替换数组值

问题描述 投票:0回答:2

所以我有一个如下所示的多维数组:

[0]=>
  array(4) {
    ["id"] => 110
    ["list"] => {}
    ["MainProduct"] => 2         <- Step2: Replace the 2 with a 5 where productName is Oranges
    ["productName"] => Oranges   <- Step1: Find where we have "Oranges"
  }
[1]=>
  array(4) {
    ["id"] => 111
    ["list"] => {}
    ["MainProduct"] => 110
    ["productName"] => Apples
  }

最终,我需要实现的是找到

value
productName 的
key
是否等于
Oranges
并基于此替换同一个子数组中
value
MainProduct 的
key

我想我应该首先找到包含

Oranges
的数组的索引,然后将
value
替换为
key
mainProduct 但似乎无法正确完成。 他们
key
的名字总是一样的,而
value
的名字却不同

另外,数组是动态的,所以带有

Oranges
的数组不会总是有相同的索引。

这是想要的结果:

[0]=>
  array(4) {
    ["id"] => 110
    ["list"] => {}
    ["MainProduct"] => 5         <- This is changed to 5 where productName is "Oranges"
    ["productName"] => Oranges   
  }
[1]=>
  array(4) {
    ["id"] => 111
    ["list"] => {}
    ["MainProduct"] => 110
    ["productName"] => Apples
  }
php arrays multidimensional-array replace
2个回答
1
投票

您提出的策略略有不同:

<?php
$data = [
  [
    "id" => 110,
    "MainProduct" => 2,
    "productName" => "Oranges",
  ],
  [
    "id" => 111,
    "MainProduct" => 110,
    "productName" => "Apples",
  ]
];

$map = [];
array_walk($data, function($entry) use ($data, &$map) {
  $map[$entry['id']] = $entry['productName'];
});

$output = [];
array_walk($data, function(&$entry) use($data)  {
  $mainProduct = array_search($entry['MainProduct'], $data);
  $entry['productName'] = $data[$mainProduct]['productName'];
});

print_r($data);

输出为:

Array
(
    [0] => Array
        (
            [id] => 110
            [MainProduct] => 2
            [productName] => Oranges
        )
    [1] => Array
        (
            [id] => 111
            [MainProduct] => 110
            [productName] => Oranges
        )
)

0
投票

如果你得到密钥并结合

productName
值,那么你可以搜索它并获得密钥。然后使用密钥更新
MainProduct

$array[array_search('Oranges', array_combine(array_keys($array), array_column($array, 'productName')))]['MainProduct'] = 5;

如果

productName
是唯一的,那么我将修改数组以对其进行索引:

$array = array_column($array, null, 'productName');
$array['Orange']['MainProduct'] = 5;
© www.soinside.com 2019 - 2024. All rights reserved.