【问题标题】:Search for variable in array()在 array() 中搜索变量
【发布时间】:2010-10-19 04:15:18
【问题描述】:

如果我有这个代码:

$result = 1;

$square = array(

"00" => -1,
"0" => 0,
"1" => 1,

);

并且想知道 $result 是否等于 $square 的任何数组 VALUES(-1、0 或 1)。

我猜应该有一个函数可以将变量与所有数组的值进行比较,并相应地返回 TRUE 或 FALSE。

如果没有这样的功能,我愿意接受您可能隐藏在袖子下的任何建议和/或解决方法:)

提前致谢

【问题讨论】:

    标签: php arrays search variables function


    【解决方案1】:

    您正在寻找in_array():

    $result = 1;
    $square = array( "00" => -1, "0" => 0, "1" => 1, );
    
    if (in_array($result, $square)) {
        echo "Found something!";
    }
    

    【讨论】:

    • 工作就像一个魅力。非常感谢!
    【解决方案2】:

    in_array 应该适合你。

    if(in_array($result, $square)) {
       //$result is in there.
    }
    

    【讨论】:

    • 记录一下,这个函数对于大型数组来说是超级慢的。
    • @mattbasta:还有其他选择吗?
    • @mattbasta 我现在不太关心速度,但感谢您的澄清!
    【解决方案3】:

    如果你的数组很大(>500 个元素),你会想要这样做:

    $flip_square = array_flip($square);
    return isset($flip_square["string_to_search_for"]);
    

    如果你不这样做,它可能会非常缓慢。这比in_array() 快很多倍。

    【讨论】:

    • 使用 array_key_exists 而不是 isset,这将在奇怪的极端情况下返回 false,即您要搜索的值最初存在于索引 null
    • 如果 OP 计划使用它,仅供参考。如果任何值是(或将永远是)除整数或字符串之外的任何值,它将不起作用。
    • @David Titarenco:准确地说:除了scalar
    • @zerkms:对不起,你错了。您不能翻转浮点数或布尔值,它们都是标量:array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in test.php on line 3
    • @zerkms 不,我没有,我同意你的看法。我有updated your sample,所以array_flipin_array 快一个数量级。正如我所说,这与上下文有关。
    【解决方案4】:

    if(array_search($result,$square)===false) { echo "DNE"; }

    注意===

    编辑:切换功能参数 - 抱歉

    【讨论】:

    • @meagar,他没有使用in_array
    • 看起来in_array 更简洁。
    【解决方案5】:

    php 中有一个函数可以做到这一点。它被称为array_search(); 对于您上面的代码,您将使用

    if(false !== array_search($square, $result)){
    echo "Found something";
    }
    

    可以找到文档的链接here。查看底部的代码示例。

    【讨论】:

    • 需要和===比较,以免返回[0]值出现问题。
    • 示例包含一个严重缺陷,如果您要搜索的元素的索引在强制为布尔值时评估为false,则会失败。您必须使用if (false !== array_search(...))
    • 感谢您的关注...我在上面的示例中修复了它
    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 2022-01-17
    • 2019-03-18
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多