Странности array_search

Тема в разделе "PHP", создана пользователем STsoldier, 21 ноя 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. STsoldier

    STsoldier Постоялец

    Регистр.:
    9 дек 2008
    Сообщения:
    100
    Симпатии:
    10
    PHP:
    php
    $array_unique 
    = array(=> 'blue'=> 'red'12 => 'white',);
    $array = array(=> 'red'=> 'blue'12 => 'white'33 => 'green'84 => 'red');
    foreach (
    $array as $value){
        if(!
    array_search($value$array_unique)){
        
    $array_unique[] = $value;
        }
    }
    print_r($array_unique);
    HTML:
    Array
    (
        [0] => blue
        [6] => red
        [12] => white
        [13] => blue
        [14] => green
    )
    
    array_search не ищет в нулевом значении массива $array_unique.
    PHP:
    $array_unique = array(=> 'blue'=> 'red'12 => 'white',);
    $array = array(=> 'red'=> 'blue'12 => 'white'33 => 'green'84 => 'red');
    foreach (
    $array as $value){
        if(!
    array_search($value$array_unique)){
        
    $array_unique[] = $value;
        }
    }
    print_r($array_unique);
    HTML:
    Array
    (
        [1] => blue
        [6] => red
        [12] => white
        [13] => green
    )
    Поменяли нулевое значение на 1 и все стало работать как должно. Вопрос почему так, я что то пропустил?
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    вот это условие:
    PHP:
     if(!array_search($value$array_unique)
    сработает если индекс массива равен нулю, поэтомузамени на
    PHP:
     if(array_search($value$array_unique) === FALSE)
    А по-хорошему схождения массивов вычисляются при помощи функции array_intersect() и не надо изобретать велосипед.
     
  3. STsoldier

    STsoldier Постоялец

    Регистр.:
    9 дек 2008
    Сообщения:
    100
    Симпатии:
    10
    Заменил.
    HTML:
    Array
    (
        [0] => blue
        [6] => red
        [12] => white
        [13] => red
        [14] => white
        [15] => red
    )
    
    Вот что я получил вместо уникальных значений для массива $array_unique.
    Вообще не то.
    Требовалось в $array_unique заносить только уникальные значения из массива $array. Ну что ж, если будет 1 дубль на весь массив - не критично.
     
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    То что требовалось ты не спросил, и телепатов тут нет. А для удаления дубликатов в массиве есть функция array_unique.
     
  5. STsoldier

    STsoldier Постоялец

    Регистр.:
    9 дек 2008
    Сообщения:
    100
    Симпатии:
    10
    Телепатом и не нужно быть. Достаточно посмотреть два элементарных примера, которые я привел в первом посте.
    Знаю, но хотел чтоб значения добавлялись по порядку. array_unique удаляет дубликаты, но не нумерует по новой.
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    PHP:
    $array_unique = array(=> 'blue'=> 'red'12 => 'white',);
    $array = array(=> 'red'=> 'blue'12 => 'white'33 => 'green'84 => 'red');
    $diff array_diff($array$array_unique);
    $array_unique array_merge($array_unique$diff);
    print_r($array_unique);
    Все ключи по порядку
     
    STsoldier нравится это.
Статус темы:
Закрыта.