2011-10-04 200 views
1

我有輪胎尺寸以下的數組:遍歷陣列並刪除重複

Array 
    (
     [0] => 155 
     [1] => 70 
     [2] => 13 
    ) 

    Array 
    (
     [0] => 155 
     [1] => 80 
     [2] => 13 
    ) 

    Array 
    (
     [0] => 165 
     [1] => 65 
     [2] => 14 
    ) 

    Array 
    (
     [0] => 175 
     [1] => 65 
     [2] => 14 
    ) 

    Array 
    (
     [0] => 175 
     [1] => 70 
     [2] => 13 
    ) 

    Array 
    (
     [0] => 175 
     [1] => 70 
     [2] => 14 
    ) 

等。現在我正在創建一個下拉列表,以便人們可以選擇他們正在搜索的輪胎尺寸。所以這裏是我的PHP代碼:

include 'database.php'; 
$result = $mysqli->query('SELECT DISTINCT SKU_SIZE FROM SKU_DATA WHERE SKU_BRANDNAME = "'.$brand.'" ORDER BY SKU_SIZE'); 

while($row = $result->fetch_assoc()){ 
    $sku_size = $row['SKU_SIZE']; 
    $chars = preg_split('/[^\d]/', $sku_size, -1, PREG_SPLIT_NO_EMPTY); 

    echo "<option>".$chars[0]."</option>"; 

} 

現在,代碼只是顯示每個陣列中的第一個數字,對於第一個下拉菜單中選擇它們。

現在它顯示155,155,165,175,175 - 和我想要它做的僅僅是展現出獨特的值,所以它只是顯示155,165,175

更新 : 謝謝!我有那部分工作。一個簡單的問題..順序是不正確的,不知道我做錯了什麼。這裏是一個預覽:

enter image description here

回答

1

使用本:

while($row = $result->fetch_assoc()){ 
    $sku_size = $row['SKU_SIZE']; 
    $chars = preg_split('/[^\d]/', $sku_size, -1, PREG_SPLIT_NO_EMPTY); 

    $sizes[$chars[0]] = true; 
} 

ksort($sizes, SORT_NUMERIC); 

foreach ($sizes as $size => $tmp){ 
    echo "<option value=\"$size\">$size</option>"; 
} 
+0

完美,謝謝!如果你不介意,我只是更新了我的答案,你可以看到訂單上發生了什麼? – Drew

+0

爲了使訂單正確,請將該行更改爲'foreach(sort($ sizes,SORT_NUMERIC)as $ size => $ tmp){' – Luke

+0

添加了對代碼的排序。附:你必須在我的情況下使用kso​​rt,因爲大小是關鍵。 – jancha

1

使用臨時數組存儲已經echo版則數字。

2

創建一個數組並在輸出之前檢查每個值是否在數組中。如果它不在數組中,請在輸出前將其添加進去。

include 'database.php'; 
$result = $mysqli->query(
    'SELECT DISTINCT SKU_SIZE 
    FROM SKU_DATA WHERE SKU_BRANDNAME = "'.$brand.'" 
    ORDER BY SKU_SIZE' 
); 

$seen = array(); 

while($row = $result->fetch_assoc()){ 
    $sku_size = $row['SKU_SIZE']; 
    $chars = preg_split('/[^\d]/', $sku_size, -1, PREG_SPLIT_NO_EMPTY); 

    if(in_array($chars[0], $seen)) 
     continue; 

    $seen[] = $chars[0]; 
    echo "<option>".$chars[0]."</option>"; 

} 
+0

我最喜歡這個解決方案,因爲沒有第二個循環。 – Sonny

+0

取決於OP想要如何處理腳本的其他部分,儘管他沒有在他的帖子中指定它,但有兩個循環可能是合理的。如果他以後再想使用查詢結果,情況尤其如此。 –

1

創建一個新的陣列只有第一個值

$diameter = array(); 
foreach ($tires as $tire) { 
    $diameter[] = $tire[0]; 
} 

然後,使用array_unique()來刪除重複的,或者只將它們添加到$直徑如果他們不是已經在那裏。

然後使用該$直徑數組創建下拉菜單。

這樣做的好處是您還可以對$ diameter數組進行排序。

2

您可以使用array_unique()函數從數組中刪除任何重複的唯一項。

EG:

$arrays = array(1,2,3) + array(1,2,3); 

print_r(array_unique($arrays)); 

// Will print just: Array ([0] => 1 [1] => 2 [2] => 3 [3] => 4)