使用 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 按键和值取消设置数组的主要内容,如果未能解决你的问题,请参考以下文章

创建php键和值数组[重复]

php多维数组通过多个键和值搜索

php和laravel数组指定元素作为键和值

PHP获取数组最后一个元素的键和值

如何在没有 foreach 的情况下在 PHP 中使用键和值来内爆数组

如何获取与php数组中的键和值相关的所有数组值