2

我一直在为 array_search 苦苦挣扎,虽然我想我现在理解了,但我只想确保我理解我的代码执行方式背后的逻辑。

我正在尝试编写一个函数,如果它不在数组中,则将元素添加到数组中,如果是,则将其删除。很简单,对吧?

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

这是写这个最有效的方法吗?似乎应该有一种方法来分配 $k 的值,同时检查它的值是 FALSE 还是其他任何值(包括 0)?

4

3 回答 3

3

您可以通过以下方式缩短代码:

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

第一行代码执行搜索,将返回值存储在 $k 中,并检查该值是否完全等于 FALSE。

文档:array_search

于 2013-03-29T16:15:26.953 回答
0

Your code is fine but you can do it this way:-

if (($k = array_search($needle, $haystack)) == FALSE) 
{
$haystack[] = $needle;
} 
else 
{
unset($haystack[$k]);
}
于 2013-03-29T16:27:49.107 回答
0

Outside of wrapping it with a function so you can reuse it, what you have works well. Most of the other examples are just rewriting what you've written already.

<?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);

}



?>
于 2013-03-29T16:59:35.043 回答