2013-03-29 4 views
2

Я немного борюсь с array_search, и хотя я думаю, что сейчас понимаю, я просто хочу полностью убедиться, что понимаю логику того, как работает мой код.array_search Логические значения возвращаемого значения

Я пытаюсь написать функцию, которая добавит элемент в массив, если он не находится в массиве, и удалите его, если он есть. Простой, не так ли?

$k = array_search($needle, $haystack) 
if ($k === FALSE) { 
    $haystack[] = $needle; 
} else { 
    unset($haystack[$k]); 
} 

Это самый эффективный способ написать это? Кажется, должен быть способ присвоить значение $ k и в то же время проверить, является ли его значение FALSE или что-то еще (включая 0)?

+0

Выглядит хорошо, кроме недостающее ';' на первой линии –

ответ

2

Вы можете сократить ваш код таким образом:

if (($k = array_search($needle, $haystack)) === FALSE) { 
    $haystack[] = $needle; 
} else { 
    unset($haystack[$k]); 
} 

Первая строка кода выполняет поиск, хранит возвращаемое значение в $ к, и проверяет, если это значение в точности равно FALSE или нет.

Документация: array_search

+1

@ cpattersonv1 '$ k' всегда устанавливается. Либо с ложным, если '$ needle' не найден, либо с ключевым значением, чтобы указать, где найти' $ needle' в массиве '$ haystack'. [Проверить страницу руководства для array_search] (http://php.net/array_search) для получения дополнительной информации. – Jocelyn

+0

@ cpattersonv1 Круглые скобки существуют по уважительной причине. Я не понимаю, почему вы хотели бы удалить их. – Jocelyn

0

Ваш код хорошо, но вы можете сделать это следующим образом: -

if (($k = array_search($needle, $haystack)) == FALSE) 
{ 
$haystack[] = $needle; 
} 
else 
{ 
unset($haystack[$k]); 
} 
+0

Вы отправили точно такой же код, который я опубликовал ранее ... – Jocelyn

+0

Нет, он не имеет знака тройного равенства. Это не будет работать, если соответствующий элемент имеет ключ 0. – caseyy

0

Вне окружив его с помощью функции, так что вы можете использовать его, что у вас есть хорошо работает. Большинство других примеров просто переписывают то, что вы уже написали.

<?php 
$haystack = array(
'5','6','7', 
); 

$needles = array('3','4','2','7'); 
print_r($haystack); 


function checker($needle,$haystack){ 
    $k = array_search($needle, $haystack); 
    if ($k === FALSE) { 
     $haystack[] = $needle; 
    } else { 
     unset($haystack[$k]); 
    } 
    return $haystack; 
} 


foreach($needles as $value){ 
    $haystack = checker($value,$haystack); 
    print_r($haystack); 

} 



?> 
Смежные вопросы