使用 PHP 按键和值取消设置数组
Posted
技术标签:
【中文标题】使用 PHP 按键和值取消设置数组【英文标题】:Unset array by key and value using PHP 【发布时间】:2019-07-17 19:53:16 【问题描述】:我的数组是 $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.....
【问题讨论】:
你有什么问题? 如何通过键和值取消设置数组? How to delete an array element based on key?的可能重复 我认为它与我想要的不一样。数组不一样 【参考方案1】:您必须通过索引取消设置。
你可以这样做:
// 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]);
希望对你有帮助,
【讨论】:
这很奇怪。你有一个错字($v
应该是 $vals
)但代码仍然有效......
已更新。这很奇怪。
其实我错了,代码不能与$v
一起工作,只是我在$arrExpense
的预过滤版本上测试它,所以它实际上并没有做任何事情( $isExistExpense
为空)。【参考方案2】:
您可以使用array_filter
直接删除$arrExpense
中日期存在于$arrIncome
中的元素(使用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 )
)
Demo on 3v4l.org
【讨论】:
是的,这样更好 您的答案不是删除数组,而是在 $arrExpense 上显示不同的数组。 您的答案不是删除数组,而是在 $arrExpense 上显示不同的数组。 @MengsengOeng 最终结果是一样的,这有关系吗? 因为我会在 $arrExpense 中做更多的事情。我必须删除 $arrExpense 的元素。感谢您的回答。以上是关于使用 PHP 按键和值取消设置数组的主要内容,如果未能解决你的问题,请参考以下文章