问题描述
我有这个数组,下面有3个元素。我想实现的是这样:
我想将这些元素分成2个数组-一个数组应仅保留pay_flag
设置为0的条目,而另一个pay_flag
设置为1的条目。
我该怎么做?我正在做foreach,但我不知道在满足条件时如何将它们分开。像这样:
foreach ($mainArray as $array) {
if ($mainArray['pay_flag'] != 0) {
// create a separate array with entries that have 'pay_flag' 1;
} else {
// create a separate array with entries that have 'pay_flag' 0;
}
}
($mainArray) [3 elements]
0:
id: (string) "1"
user_id: (null) 1
description: (null) NULL
pay_flag: (integer) 0
reported_at: (null) NULL
created_at: (string) "2020-09-06 17:00:00"
1:
id: (string) "1"
user_id: (null) 1
description: (null) NULL
pay_flag: (integer) 0
reported_at: (null) NULL
created_at: (string) "2020-09-06 17:00:00"
2:
id: (string) "1"
user_id: (null) 1
description: (null) NULL
pay_flag: (integer) 1
reported_at: (null) NULL
created_at: (string) "2020-09-06 17:00:00"
解决方法
<?php
$items =
[
[
'name' => 'Fred','flag' => 0
],[
'name' => 'Wilma','flag' => 1
],[
'name' => 'Betty','flag' => 1
]
];
foreach($items as $item)
{
$grouped[$item['flag']][] = $item;
}
var_export($grouped);
输出:
array (
0 =>
array (
0 =>
array (
'name' => 'Fred','flag' => 0,),1 =>
array (
0 =>
array (
'name' => 'Wilma','flag' => 1,1 =>
array (
'name' => 'Betty',)
然后,您可以通过$grouped[0]
访问零,并通过$grouped[1]
访问零(只要您同时具有两种标志)。
这是另一种解决方案,根据您的问题,请尝试使用运算符[] 将项目添加到数组:
<?php
$mainArray =
[
[
'lorem' => 'aaaa','pay_flag' => 0
],[
'lorem' => 'bbbb','pay_flag' => 1
],[
'lorem' => 'cccc','pay_flag' => 1
]
];
$arr1 = array();
$arr0 = array();
foreach ($mainArray as $array) {
if ($array['pay_flag'] !== 0) {
// create a separate array with entries that have 'pay_flag' 1;
$arr1[] = $array;
} else {
// create a separate array with entries that have 'pay_flag' 0;
$arr0[] = $array;
}
}
print_r($arr1); //array which contains entries that have 'pay_flag' 1
print_r($arr0); //array which contains entries that have 'pay_flag' 0
,
您可以使用array_filter
进行此操作,例如:
$withoutPayFlag = array_filter($mainArray,function($value)) {
return $value['pay_flag'] === 0;
}
);
函数回调可确保仅返回数组中将pay_flag设置为0的项目。然后您也可以对pay_flag 1进行此操作,然后将结果添加到其他数组中,例如$withPayFlag
。