如何删除数组中的重复条目但通过覆盖保留其值

安东尼奥·齐穆尔托斯

我有以下数组:

Array
(
    [0] => Array
        (
            [contact_id] => 1 // *
            [exact_email_found] => 0
            [half_email_found] => 0
            [possible_by_postal_code] => 1
            [found_first_name] => 0
            [found_last_name] => 0
        )

    [1] => Array
        (
            [contact_id] => 3
            [exact_email_found] => 0
            [half_email_found] => 0
            [possible_by_postal_code] => 0
            [found_first_name] => 1
            [found_last_name] => 0
        )

    [2] => Array
        (
            [contact_id] => 2 // **
            [exact_email_found] => 0
            [half_email_found] => 0
            [possible_by_postal_code] => 0
            [found_first_name] => 1
            [found_last_name] => 0
        )

    [3] => Array
        (
            [contact_id] => 1 // *
            [exact_email_found] => 0
            [half_email_found] => 0
            [possible_by_postal_code] => 0
            [found_first_name] => 0
            [found_last_name] => 1
        )

    [4] => Array
        (
            [contact_id] => 2 // **
            [exact_email_found] => 1
            [half_email_found] => 0
            [possible_by_postal_code] => 0
            [found_first_name] => 0
            [found_last_name] => 0
        )

)

我试图使该数组“合并但保留覆盖的值”。

让我进一步解释。如果您查看 array[0],您可以看到[possible_by_postal_code] => 1. 这,有一个[contact_id] => 1如果你看看下面你可以看到阵列[3]具有相同的ID,但[possible_by_postal_code] => 0[found_last_name] => 1来代替。

在新数组中,我试图完成以下操作:

Array
(
    [0] => Array
        (
            [contact_id] => 1 // *
            [exact_email_found] => 0
            [half_email_found] => 0
            [possible_by_postal_code] => 1
            [found_first_name] => 0
            [found_last_name] => 1
        )

    [1] => Array
        (
            [contact_id] => 3
            [exact_email_found] => 0
            [half_email_found] => 0
            [possible_by_postal_code] => 0
            [found_first_name] => 1
            [found_last_name] => 0
        )

    [2] => Array
        (
            [contact_id] => 2 // **
            [exact_email_found] => 1
            [half_email_found] => 0
            [possible_by_postal_code] => 0
            [found_first_name] => 1
            [found_last_name] => 0
        )   

)

阵列[0],其具有contact_id = 1现在只存在一个时间和值possible_by_postal_codefound_last_name具有1作为值。

注意 1:这只是一个例子,我的数组有多个200对象,而且它是随机的。这意味着 acontact_id = 5可能位于位置0189

注意 2:重复条目可能不止一个2

主 .php 文件

$mTempDBUsers = getDataOfTempDB();

foreach($mTempDBUsers as $index => $mCurrentUser){


    $allUserData = [];
    $allUserConfig = [];

    $mCurrentUserEmail = $mCurrentUser['email'];
    $mCurrentPostalCode = $mCurrentUser['postal_code'];
    $mCurrentLastName   = $mCurrentUser['lastname'];
    $mCurrentFirstName  = $mCurrentUser['firstname'];

    if($mCurrentPostalCode == "EX23 8JS") {

        $current_user_config = array(
            "exact_email_found" => 0,
            "half_email_found" => 0,
            "possible_by_postal_code" => 0,
            "found_first_name" => 0,
            "found_last_name" => 0,
        );


        if (tryToFindUserWithEmail($mCurrentUserEmail, "")) {

            $current_user_config['exact_email_found'] = 1;

            $tempArray = tryToFindUserWithEmail($mCurrentUserEmail, $current_user_config);

            $allUserData = array_merge($allUserData, $tempArray);

        }

        if (tryToFindUserWithEmailHalf($mCurrentUserEmail, "")) {

            $current_user_config = array(
                "exact_email_found" => 0,
                "half_email_found" => 0,
                "possible_by_postal_code" => 0,
                "found_first_name" => 0,
                "found_last_name" => 0,
            );

            $current_user_config['half_email_found'] = 1;


            $tempArray = tryToFindUserWithEmailHalf($mCurrentUserEmail, $current_user_config);

            $allUserData = array_merge($allUserData, $tempArray);

        }


        if (tryToFindUserBy("mailing_postal_code", $mCurrentPostalCode, "")) {


            $current_user_config = array(
                "exact_email_found" => 0,
                "half_email_found" => 0,
                "possible_by_postal_code" => 0,
                "found_first_name" => 0,
                "found_last_name" => 0,
            );

            $current_user_config['possible_by_postal_code'] = 1;

            $tempArray = tryToFindUserBy("mailing_postal_code", $mCurrentPostalCode, $current_user_config);

            $allUserData = array_merge($allUserData, $tempArray);


        }

        if (tryToFindUserBy("lastname", str_replace(' ', '', $mCurrentLastName), "")) {

            $current_user_config = array(
                "exact_email_found" => 0,
                "half_email_found" => 0,
                "possible_by_postal_code" => 0,
                "found_first_name" => 0,
                "found_last_name" => 0,
            );

            $current_user_config['found_last_name'] = 1;

            $tempArray = tryToFindUserBy("lastname", str_replace(' ', '', $mCurrentLastName), $current_user_config);

            $allUserData = array_merge($allUserData, $tempArray);

        }

        if(tryToFindUserBy("firstname", $mCurrentFirstName, "")) {


            $current_user_config = array(
                "exact_email_found" => 0,
                "half_email_found" => 0,
                "possible_by_postal_code" => 0,
                "found_first_name" => 0,
                "found_last_name" => 0,
            );


            $current_user_config['found_first_name'] = 1;

            $tempArray = tryToFindUserBy("firstname", $mCurrentFirstName, $current_user_config);

            $allUserData = array_merge($allUserData, $tempArray);

        }

        print_r($allUserData);



    }

}

功能:tryToFindUserBy

function tryToFindUserBy($mTypeOfSearch, $mInfoOfCurrentUser, $current_user_config){

    global $connection;

    $usersArray = [];

    $query_select = "SELECT * FROM main_db WHERE upper($mTypeOfSearch) = upper('$mInfoOfCurrentUser')";

    $result = mysqli_query($connection,$query_select);

    $num_rows = $result->num_rows;

    if($num_rows >= 1){
        for($i = 0; $i < $num_rows; $i++) {
            $usersArray[$i] = mysqli_fetch_array($result, MYSQLI_ASSOC);

            if($current_user_config != "") {
                foreach ($current_user_config as $index => $config) {
                    $usersArray[$i][$index] = $config;
                }
            }
        }

        return $usersArray;
    }
    else{
        return false;
    }

}

功能:tryToFindUserWithEmail

function tryToFindUserWithEmail($mEmail, $current_user_config){

    global $connection;

    $usersArray = [];

    $query_select = "SELECT * FROM main_db WHERE upper(email) = upper('$mEmail')";

    $result = mysqli_query($connection,$query_select);

    $num_rows = $result->num_rows;

    if($num_rows >= 1){
        for($i = 0; $i < $num_rows; $i++) {
            $usersArray[$i] = mysqli_fetch_array($result, MYSQLI_ASSOC);

            if($current_user_config != "") {
                foreach ($current_user_config as $index => $config) {
                    $usersArray[$i][$index] = $config;
                }
            }
        }

        return $usersArray;
    }
    else{
        return false;
    }

}

功能:tryToFindUserWithEmailHalf

function tryToFindUserWithEmailHalf($mEmail, $current_user_config){

    global $connection;

    $usersArray = [];

    $mEmail = explode("@", $mEmail)[0];

    $query_select = "SELECT * FROM main_db WHERE upper(email) LIKE upper('$mEmail%')";


    $result = mysqli_query($connection,$query_select);

    $num_rows = $result->num_rows;

    if($num_rows >= 1){
        for($i = 0; $i < $num_rows; $i++) {
            $usersArray[$i] = mysqli_fetch_array($result, MYSQLI_ASSOC);

            if($current_user_config != "") {
                foreach ($current_user_config as $index => $config) {
                    $usersArray[$i][$index] = $config;
                }
            }
        }

        return $usersArray;
    }
    else{
        return false;
    }

}

函数 getDataOfTempDB

function getDataOfTempDB(){

    global $connection;

    $usersArray = [];

    $query_select = "SELECT * FROM temp_db";

    $result = mysqli_query($connection,$query_select);

    $num_rows = $result->num_rows;


    for($i = 0; $i < $num_rows; $i++) {
        $usersArray[] = mysqli_fetch_array($result, MYSQLI_ASSOC);
    }


    mysqli_free_result($result);

    return $usersArray;

}
斯提库丹妮拉


    $newArray = [];
    foreach ($myArray as $key => $row) {
        if (isset($newArray[$row['contact_id']])) {
            foreach ($row as $k => $r) {
                if($r ){
                    $newArray[$row['contact_id']][$k] = $r;
                }
            }
        } else{
            $newArray[$row['contact_id']] = $row;
        }
    }

结果将是这样的:



    array (size=3)
      1 => 
        array (size=6)
          'contact_id' => int 1
          'exact_email_found' => int 0
          'half_email_found' => int 0
          'possible_by_postal_code' => int 1
          'found_first_name' => int 0
          'found_last_name' => int 1
      3 => 
        array (size=6)
          'contact_id' => int 3
          'exact_email_found' => int 0
          'half_email_found' => int 0
          'possible_by_postal_code' => int 0
          'found_first_name' => int 1
          'found_last_name' => int 0
      2 => 
        array (size=6)
          'contact_id' => int 2
          'exact_email_found' => int 1
          'half_email_found' => int 0
          'possible_by_postal_code' => int 0
          'found_first_name' => int 1
          'found_last_name' => int 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章