簡體   English   中英

刪除與另一個多維數組共享一個鍵-值對的子數組

[英]Removing subarrays that share a key-value pair with another multidimensional array

我有以下兩個數組。 如果array1具有stu_id我想從array2刪除數據。 最終數組應類似於result_array

$array1 = Array
(
    [0] => Array
        (
            [stu_id] => 1
            [name] => mr.a
        )
    [1] => Array
        (
            [stu_id] => 3
            [name] => mr.b
        )
)

$array2 = Array
(
    [0] => Array
        (
            [id] => 1
            [stu_id] => 1
            [data] => abc
        )
    [1] => Array
        (
            [id] => 2
            [stu_id] => 2
            [data] => xyz
        )
    [3] => Array
        (
            [id] => 3
            [stu_id] => 3
            [data] => aaa
        )
)

$result_array = Array
(
    [0] => Array
        (
            [id] => 2
            [stu_id] => 2
            [data] => xyz
        )
)

我嘗試了array_diff, $result_array = array_diff($array2, $array1); 但它不起作用。

請幫我做到這一點。

使用帶有stud_id array_column()臨時分配鍵( NULL保留完整的子stud_id數據),然后使用array_diff_key()進行過濾,並使用array_values()重置鍵:

代碼:( 演示

$array1=[
    ['stu_id'=>1,'name'=>'mr.a'],
    ['stu_id'=>3,'name'=>'mr.b']
];

$array2=[
    ['id'=>1,'stu_id'=>1,'data'=>'abc'],
    ['id'=>2,'stu_id'=>2,'data'=>'xyz'],
    ['id'=>3,'stu_id'=>3,'data'=>'aaa']
];

//var_export(array_column($array1,NULL,'stu_id'));
//var_export(array_column($array2,NULL,'stu_id'));
var_export(array_values(array_diff_key(array_column($array2,NULL,'stu_id'),array_column($array1,NULL,'stu_id'))));

輸出:

array (
  0 => 
  array (
    'id' => 2,
    'stu_id' => 2,
    'data' => 'xyz',
  ),
)

如果要使用foreach循環結構,請從$array1生成stu_id的過濾數組, stu_id $array2每次迭代編寫條件檢查。 此方法不會修改原始數組,因此可以在“向下腳本”中重用它們。

碼:

$stu_ids=array_column($array1,'stu_id');
foreach($array2 as $row){
    if(!in_array($row['stu_id'],$stu_ids)){
        $result[]=$row;  // auto-index the qualifying subarrays
    }
}
var_export($result);
// same result as above method
foreach($array1 as $data1){
    foreach($array2 as $k => $data2){
        if($data2["stu_id"] == $data1["stu_id"]){
            unset($array2[$k]);
            break;
        }
    }
}
$result_array = $array2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM