Перебрать массив и удалить дубликаты - PullRequest
1 голос
/ 04 октября 2011

У меня есть следующий массив для размеров шин:

    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

Ответы [ 5 ]

2 голосов
/ 04 октября 2011

Вы можете удалить любые дублирующиеся уникальные элементы из массива, используя функцию 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 )
2 голосов
/ 04 октября 2011

Создайте массив и проверьте, есть ли каждое значение в массиве, прежде чем выводить его. Если его нет в массиве, добавьте его перед выводом.

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>";

}
1 голос
/ 04 октября 2011

Создайте новый массив только с первым значением

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

Затем используйте array_unique (), чтобы удалить дубликаты, или только добавьте их в $ диаметр, если их там еще нет.

Затем используйте этот массив $ Diameter для создания раскрывающегося списка.

Преимущество этого заключается в том, что вы также можете отсортировать массив $ Diameter.

1 голос
/ 04 октября 2011

Используйте временный массив для хранения чисел, которые были echo ed тогда.

1 голос
/ 04 октября 2011

используйте это:

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>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...