получить повторное значение из родительского массива, а не повторное значение из родительского массива - PullRequest
0 голосов
/ 10 сентября 2018

один - родительский массив, а другой - фильтрованный массив.Оттуда я просто хочу установить два отдельных массива: общий массив уникальный массив

$a = array([0]=> Array
    (
        [id] => 22429
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ),[1]=> Array
    (
        [id] => 22430
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ),[2]=> => Array
    (
        [id] => 22431
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ),[3] => Array
    (
        [id] => 22432
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ));

$b = array("0"=> Array
    (
        [id] => 22428
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ),"1" => Array
    (
        [id] => 22430
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ),[2]=> Array
    (
        [id] => 22431
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ),[3] => Array
    (
        [id] => 22432
        [user_id] => 0
        [shop_id] => 78
        [start_date] =>
        [fn_point] => 0
    ));;

вывод для уникального массива будет

$c = array(
        [0]=> Array
        (
            [id] => 22429
            [user_id] => 0
            [shop_id] => 78
            [start_date] =>
            [fn_point] => 0
        )
    );

вывод для общего массива будет

$u = array(
        [0]=> Array
        (
            [id] => 22430
            [user_id] => 0
            [shop_id] => 78
            [start_date] =>
            [fn_point] => 0
        ),[1]=> Array
        (
            [id] => 22431
            [user_id] => 0
            [shop_id] => 78
            [start_date] =>
            [fn_point] => 0
        ),[2]=> Array
        (
            [id] => 22432
            [user_id] => 0
            [shop_id] => 78
            [start_date] =>
            [fn_point] => 0
        )
    );

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Array_intersect и array_diff

$a = array('1','2','3','4');
$b = array('4','5','6','7');

$c = array_intersect($a, $b);
var_dump($c); //4

$d = array_diff($a,$b);
var_dump($d); //1,2,3

https://3v4l.org/Ut8JW

0 голосов
/ 10 сентября 2018

Чтобы получить общее из обоих массивов, используйте array_intersect ()

$c = array_values(array_intersect($a,$b)); //array_values() used for re-indexing final array
print_r($c);

Выход: - https://eval.in/1055829

Использовать array_diff ()

$c = array_values(array_diff($a,$b));//array_values() used for re-indexing final array
print_r($c);

Выход: - https://eval.in/1055830

Справка: -

array_values ​​()

Для вашего отредактированного вопроса примените foreach() вместе с in_array() и array_column()

$final_array = [];

foreach($a as $key=>$val){
  if(in_array($val['id'],array_column($b,'id'))){
    $final_array[] = $val;
  }

}

print_r($final_array); // common values array 

Вывод: - https://eval.in/1055838

И

$final_array = [];

foreach($a as $key=>$val){
  if(!in_array($val['id'],array_column($b,'id'))){
    $final_array[] = $val;
  }

}

print_r($final_array); // non common value array

Выход: - https://eval.in/1055839

0 голосов
/ 10 сентября 2018

Для вашего общего массива:

array_intersect($a, $b);

Для вашего уникального массива:

array_unique(array_merge($a, $b), SORT_REGULAR);
...