组合具有不同结构的两个PHP数组,同时消除重复记录


Combing two PHP arrays with different structures while weeding out duplicate records

我有两个数组,下面的结构示例:

数组#1——键作为相应的值存储在数组的第一个索引中。

Array(
    [0] => Array(
        [0] => name
        [1] => time
    ),
    [1] => Array(
        [0] => Bob
        [1] => 20
    ),
    [2] => Array(
        [0] => Jack
        [1] => 25
    )
)

数组#2——每个数组都有一个编号键和命名键,对应的值是相同的

Array(
    [0] => Array(
        [name] => Bob
        [0] => Bob
        [time] => 20
        [1] => 20
    ),
    [1] => Array(
        [name] => Test
        [0] => Test
        [time] => 40
        [1] => 40
    )
)

尝试:

foreach($arr as $record) {
    if(!in_array($record['name'], $names))
        $names[] = $record['name'];
}
foreach($csv as $rec) {
    if(!in_array($rec[0], $names))
        $names[] = $rec[0];
}

如何组合这些数组,并根据名称的值剔除和重复?

尝试下面的代码,我在代码之间添加了命令。

//Array 1
$array1 = Array(
0 => Array(
    0 => "Bob",
    1 => 20,
),
1 => Array(
    0 => "Jack",
    1 => 25,
));
//Array 2
$array2 = Array(
0 => Array(
    "name" => "Bob",
    0 => "Bob",
    "time" => 20,
    1 => 20,
),
1 => Array(
    "name" => "Test",
    0 => "Test",
    "time" => 40,
    1 => 40,
));
//Function to search if the value already exists
function inArray($array, $search)
{
    foreach($array as $key=>$subArray)
    {
        if(in_array($search, $subArray))
        {
            return true;
        }
    }   
    return false;
}
$newArray = array();
//Loop over array1 length + array2 length   
for($i = 0 ; $i < (count($array1) + count($array2)) ; $i++)
{
    //Choose the array based on the counter ($i)
    if($i < count($array1))
    {
        $data       = $array1;
        $arrayIndex = $i;
    }
    else
    {
        $data       = $array2;
        $arrayIndex = $i - count($array1);
    }       
    //Check if array value exists
    if(!inArray($newArray,$data[$arrayIndex][0]))
    {
        //Add if it doesn't exists with the keys 'name' and 'time'
        $newArray[] = array('name' => $data[$arrayIndex][0], 'time'=> $data[$arrayIndex][1]);
    }       
}
print_r($newArray);

输出为:

Array
(
    [0] => Array
        (
            [name] => Bob
            [time] => 20
        )
    [1] => Array
        (
            [name] => Jack
            [time] => 25
        )
    [2] => Array
        (
            [name] => Test
            [time] => 40
        )
)