Странности array_search

Статус
В этой теме нельзя размещать новые ответы.

STsoldier

Постоялец
Регистрация
9 Дек 2008
Сообщения
96
Реакции
38
PHP:
php
$array_unique = array(0 => 'blue', 6 => 'red', 12 => 'white',);
$array = array(0 => 'red', 8 => '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(1 => 'blue', 6 => 'red', 12 => 'white',);
$array = array(0 => 'red', 8 => '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 и все стало работать как должно. Вопрос почему так, я что то пропустил?
 
PHP:
php
$array_unique = array(0 => 'blue', 6 => 'red', 12 => 'white',);
$array = array(0 => 'red', 8 => '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(1 => 'blue', 6 => 'red', 12 => 'white',);
$array = array(0 => 'red', 8 => '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 и все стало работать как должно. Вопрос почему так, я что то пропустил?

вот это условие:
PHP:
 if(!array_search($value, $array_unique)
сработает если индекс массива равен нулю, поэтомузамени на
PHP:
 if(array_search($value, $array_unique) === FALSE)

А по-хорошему схождения массивов вычисляются при помощи функции array_intersect() и не надо изобретать велосипед.
 
...поэтомузамени на
PHP:
 if(array_search($value, $array_unique) === FALSE)
Заменил.
HTML:
Array
(
    [0] => blue
    [6] => red
    [12] => white
    [13] => red
    [14] => white
    [15] => red
)
Вот что я получил вместо уникальных значений для массива $array_unique.
А по-хорошему схождения массивов вычисляются при помощи функции array_intersect() и не надо изобретать велосипед.
Вообще не то.
Требовалось в $array_unique заносить только уникальные значения из массива $array. Ну что ж, если будет 1 дубль на весь массив - не критично.
 
Заменил.
HTML:
Array
(
    [0] => blue
    [6] => red
    [12] => white
    [13] => red
    [14] => white
    [15] => red
)
Вот что я получил вместо уникальных значений для массива $array_unique.

Вообще не то.
Требовалось в $array_unique заносить только уникальные значения из массива $array. Ну что ж, если будет 1 дубль на весь массив - не критично.
То что требовалось ты не спросил, и телепатов тут нет. А для удаления дубликатов в массиве есть функция array_unique.
 
То что требовалось ты не спросил, и телепатов тут нет.
Телепатом и не нужно быть. Достаточно посмотреть два элементарных примера, которые я привел в первом посте.
А для удаления дубликатов в массиве есть функция array_unique.
Знаю, но хотел чтоб значения добавлялись по порядку. array_unique удаляет дубликаты, но не нумерует по новой.
 
Телепатом и не нужно быть. Достаточно посмотреть два элементарных примера, которые я привел в первом посте.

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

PHP:
$array_unique = array(1 => 'blue', 6 => 'red', 12 => 'white',);
$array = array(0 => 'red', 8 => 'blue', 12 => 'white', 33 => 'green', 84 => 'red');
$diff = array_diff($array, $array_unique);
$array_unique = array_merge($array_unique, $diff);
print_r($array_unique);
Все ключи по порядку
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху