使用 PHP 按键和值取消设置数组
Unset array by key and value using PHP
我的数组是 $arrIncome 和 $arrExpense。他们有一些相同的日期和一些不同的日期。
$arrIncome = [
[
'date' => '01-01-2019',
'total' => '500',
],
[
'date' => '02-01-2019',
'total' => '200',
],
[
'date' => '03-01-2019',
'total' => '300',
],
[
'date' => '04-01-2019',
'total' => '900',
],
];
$arrExpense= [
[
'date' => '01-01-2019',
'total' => '50',
],
[
'date' => '02-01-2019',
'total' => '60',
],
[
'date' => '07-01-2019',
'total' => '25',
],
[
'date' => '08-01-2019',
'total' => '50',
],
];
我在 $arrIncome 数组中循环,如果我发现收入日期在 $arrExpense 数组中,我将在 $arrIncome 的收入日期之前删除 $arrExpense 中的一个数组,因为我想制作唯一的日期。
foreach ($arrIncome as $income){
$isExistExpense = array_filter($arrExpense, function($expense) use($income){
return $expense->date == date('Y-m-d', strtotime($income->date));
});
if(count($isExistExpense) > 0 ){
foreach ($isExistExpense as $expense){
// THIS PLACE TO UNSET $arrExpense by date value
unset($arrExpense['date'] = $income->date); // this is a wrong way
}
}else{
// my code more here.....
}
}
您必须按索引取消设置。
你可以这样做:
// Get the intersection of the dates
$isExistExpense = array_intersect(
array_column($arrIncome,'date'),
array_column($arrExpense,'date'));
// Loop through the `$arrExpense` and unset the that exist in the array.
foreach($arrExpense as $index=>$vals){
if(in_array($vals['date'], $isExistExpense)){
unset($arrExpense[$index]);
}
}
希望这对您有所帮助,
您可以使用 array_filter
to directly remove the elements of $arrExpense
that have dates which exist in $arrIncome
(using array_column
获取该数组中的日期列表):
$arrExpense = array_filter($arrExpense, function ($v) use ($arrIncome) {
return !in_array($v['date'], array_column($arrIncome, 'date'));
});
print_r($arrExpense);
输出:
Array (
[2] => Array ( [date] => 07-01-2019 [total] => 25 )
[3] => Array ( [date] => 08-01-2019 [total] => 50 )
)
我的数组是 $arrIncome 和 $arrExpense。他们有一些相同的日期和一些不同的日期。
$arrIncome = [
[
'date' => '01-01-2019',
'total' => '500',
],
[
'date' => '02-01-2019',
'total' => '200',
],
[
'date' => '03-01-2019',
'total' => '300',
],
[
'date' => '04-01-2019',
'total' => '900',
],
];
$arrExpense= [
[
'date' => '01-01-2019',
'total' => '50',
],
[
'date' => '02-01-2019',
'total' => '60',
],
[
'date' => '07-01-2019',
'total' => '25',
],
[
'date' => '08-01-2019',
'total' => '50',
],
];
我在 $arrIncome 数组中循环,如果我发现收入日期在 $arrExpense 数组中,我将在 $arrIncome 的收入日期之前删除 $arrExpense 中的一个数组,因为我想制作唯一的日期。
foreach ($arrIncome as $income){
$isExistExpense = array_filter($arrExpense, function($expense) use($income){
return $expense->date == date('Y-m-d', strtotime($income->date));
});
if(count($isExistExpense) > 0 ){
foreach ($isExistExpense as $expense){
// THIS PLACE TO UNSET $arrExpense by date value
unset($arrExpense['date'] = $income->date); // this is a wrong way
}
}else{
// my code more here.....
}
}
您必须按索引取消设置。
你可以这样做:
// Get the intersection of the dates
$isExistExpense = array_intersect(
array_column($arrIncome,'date'),
array_column($arrExpense,'date'));
// Loop through the `$arrExpense` and unset the that exist in the array.
foreach($arrExpense as $index=>$vals){
if(in_array($vals['date'], $isExistExpense)){
unset($arrExpense[$index]);
}
}
希望这对您有所帮助,
您可以使用 array_filter
to directly remove the elements of $arrExpense
that have dates which exist in $arrIncome
(using array_column
获取该数组中的日期列表):
$arrExpense = array_filter($arrExpense, function ($v) use ($arrIncome) {
return !in_array($v['date'], array_column($arrIncome, 'date'));
});
print_r($arrExpense);
输出:
Array (
[2] => Array ( [date] => 07-01-2019 [total] => 25 )
[3] => Array ( [date] => 08-01-2019 [total] => 50 )
)