Сбросить массив по ключу и значению с помощью PHP - PullRequest
0 голосов
/ 24 февраля 2019

Мой массив: $ 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, я удалю массив в $ arrExpense по доходудата $ arrIncome, потому что я хочу сделать уникальную дату.

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.....
        }
    }

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Вы можете использовать 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 )
)

Демонстрация на 3v4l.org

0 голосов
/ 24 февраля 2019

Вы должны сбросить его по индексу.

Вы можете сделать это следующим образом:

// 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]);
    }
}

Надеюсь, это поможет,

...