PHP - 寻找一种方法来比较二维数组中的一个值,然后将具有相同值的数组组合成一个三维数组

PHP - Looking for a way to compare a value in two dimensional array, then combine arrays with same value to form a three dimensional array

我正在寻找一种方法来实现上述标题的结果。 我有一个像这样的二维数组

Array
(
    [0] => Array
        (
            [reference_no] => A0012
            [code] => HSWH30
            [net_unit_price] => 24000
            [quantity] => 2
        )

    [1] => Array
        (
            [reference_no] => A0012
            [code] => HSWH15
            [net_unit_price] => 21000
            [quantity] => 2
        )

    [2] => Array
        (
            [reference_no] => A0013
            [code] => HS-106AR
            [net_unit_price] => 2400
            [quantity] => 1
        )

    [3] => Array
        (
            [reference_no] => A0013
            [code] => HS-8012
            [net_unit_price] => 4500
            [quantity] => 2
        )
)

并且正在寻找一种使用 [reference_no] 值比较数组的方法,然后将具有相同 [reference_no] 的数组添加到数组内部,从而形成三维数组,如图所示以下

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [reference_no] => A0012
                    [code] => HSWH30
                    [net_unit_price] => 24000
                    [quantity] => 2
                )

            [1] => Array
                (
                    [reference_no] => A0012
                    [code] => HSWH15
                    [net_unit_price] => 21000
                    [quantity] => 2
                )
        )

    [1] => Array
        (
            [0] => Array
                (
                    [reference_no] => A0013
                    [code] => HS-106AR
                    [net_unit_price] => 2400
                    [quantity] => 1
                )

            [1] => Array
                (

                    [reference_no] => A0013
                    [code] => HS-8012
                    [net_unit_price] => 4500
                    [quantity] => 2
                )       
        )
)

我需要一个快速的帮助,我已经尝试使用 for 循环和 array_push 来比较和 merge/combine 类似的数组,但没有得到我需要的结果。

为什么不尝试让我们说:

 $arrayExample[0] => Array
                ( [reference_no] => A0013
                        [code] => HS-8012
                         [net_unit_price] => 4500
                         [quantity] => 2 )

所以从技术上讲 $arrayExample[0]["reference_no"] is A0013 的价值 如果是这样,为什么不使用

if( strpos($arrayExample[0]["reference_no"],"A0013") !==false)
{
    $arrayExample[0]["reference_no"] = array( 
[0] = //something
[1] = //something1
...
)}

希望对您有所帮助

我会创建一个新的关联数组,并使用 reference_no 作为键。然后检查新数组中是否存在键就容易多了。

$sorted = [];

foreach($array as $el) {
  $ref = $el[reference_no];
  if (array_key_exists($ref, $sorted)) {
    $sorted[$ref][] = $el;
  } else {
    $sorted[$ref] = [$el];
  }
}

如果您需要将 $sorted 转换为具有顺序数字索引 (0,1,2,3 ...),您可以在最后一步使用 array_map 或另一个 foreach 循环.

您需要做的就是循环数组并创建一个新的关联数组,以 ref no 为键。
这将根据需要对项目进行分组,当循环完成后,您将使用数组值重置数组的索引。

foreach($arr as $sub){
    $new[$sub['reference_no']][] = $sub;
}
$new = array_values($new);
var_dump($new);

输出:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    array(4) {
      ["reference_no"]=>
      string(5) "A0012"
      ["code"]=>
      string(6) "HSWH30"
      ["net_unit_price"]=>
      string(5) "24000"
      ["quantity"]=>
      string(1) "2"
    }
    [1]=>
    array(4) {
      ["reference_no"]=>
      string(5) "A0012"
      ["code"]=>
      string(6) "HSWH15"
      ["net_unit_price"]=>
      string(5) "21000"
      ["quantity"]=>
      string(1) "2"
    }
  }
  [1]=>
  array(2) {
    [0]=>
    array(4) {
      ["reference_no"]=>
      string(5) "A0013"
      ["code"]=>
      string(8) "HS-106AR"
      ["net_unit_price"]=>
      string(4) "2400"
      ["quantity"]=>
      string(1) "1"
    }
    [1]=>
    array(4) {
      ["reference_no"]=>
      string(5) "A0013"
      ["code"]=>
      string(7) "HS-8012"
      ["net_unit_price"]=>
      string(4) "4500"
      ["quantity"]=>
      string(1) "2"
    }
  }
}

https://3v4l.org/DQEmC