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"
}
}
}
我正在寻找一种方法来实现上述标题的结果。 我有一个像这样的二维数组
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"
}
}
}