簡體   English   中英

添加到關聯數組 - 但沒有重復

[英]Add to associative array — but no duplicates

我的目標是將一組新的產品記錄附加到現有的關聯數組中,但確保每個產品僅表示一次。 我寫了下面的函數。 對於這么簡單的事情,它看起來像太多的代碼。 我需要了解一個PHP數組函數嗎?

function _append ( &$already, $addition ) {
    while( $result = mysql_fetch_array( $addition ) ) {
        $already_found = FALSE;
        foreach ( $already as $try ) {
            if ( $try["products_id"] == $result["products_id"] ) {
                $already_found = TRUE;
                break;
            }
        }
        if ( !$already_found ) { $already[] = $result; }
    }
}

使用產品ID作為密鑰,例如$already[$result['products_id']] = $result; ,然后您可以使用array_key_exists輕松檢查所有現有產品的產品ID。 (或者,不要。無論哪種方式,每個ID只有一個產品;如果不檢查,最新的副本將覆蓋之前的副本。)

無論哪種方式,你完全擺脫了foreach

function _append(&$already, $addition) {
    while ($result = mysql_fetch_array($addition)) {
        if (!array_key_exists($result['products_id'], $already)) {
            $already[$result['products_id']] = $result;
        }
    }
}

問題是,您的數組不再是數字索引。 無論您向其中添加項目,都可以使用其鍵(products_id的值)添加它們。 但你可以像往常一樣說foreach ($items as $item)

如何在$already將產品ID分配為數組鍵?

while( $result = mysql_fetch_array( $addition ) ) {
  $already[$result['products_id']] = $result;
}

這當然會覆蓋舊的產品記錄,但它應該優雅地避免重復!

暫無
暫無

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

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