【问题标题】:array_search returns NULL/blankarray_search 返回 NULL/空白
【发布时间】:2021-02-21 22:37:15
【问题描述】:

我有这样的数组

<?php
$a = array(
    "apple"=>"uniqid1",
    "apple"=>"uniqid2",
    "apple"=>"uniqid3",
    "bannana"=>"uniqid4"
    );

echo array_search("uniqid1", $a, true);

?>

当我搜索“uniqid4”时,它返回“bannana”(一切都好)

但是当我搜索“uniqid1”时,它返回空白/NULL(我知道有重复 - 但数组是原样)

我的问题是:

如何每次搜索“uniqid1”或“uniqid2”或“uniqid3”并得到“apple”?

基于第一个答案:

如果我反转数组:

$a=array(

"uniqid1"=>"apple",
"uniqid2"=>"apple",
"uniqid3"=>"apple",
"uniqid4"=>"bannana");

如何搜索uniqid3uniqid2uniqid1

echo array_search("uniqid3",$a, true);

每次都得到apple

【问题讨论】:

  • 你说数组就是这样。我们可以看看实际数组的样本吗?

标签: php arrays search


【解决方案1】:

正如 ArSeN 所说,你不能多次使用同一个苹果索引。这样做时,PHP 会理解只有第三个存在,前两个将被忽略,因为它们使用相同的键。

也许有一种方法可以做到这一点,那就是通过更改键和值,然后键将变为值。

代码如下所示:

<?php

$array = array(
    'uniqid1' => 'apple',
    'uniqid2' => 'apple',
    'uniqid3' => 'apple',
    'uniqid4' => 'bannana'
);

echo $array['uniqid1'];
echo '<br>';
echo $array['uniqid2'];
echo '<br>';
echo $array['uniqid3'];
echo '<br>';
echo $array['uniqid4'];

?>

输出

苹果
苹果
苹果
bannana

如您所见,键已经变成了值,现在可以通过指示它们的索引来获取这些值

【讨论】:

    【解决方案2】:

    您不能多次使用同一个索引。多次定义它会覆盖该索引处的值,这会导致只剩下最后一个分配的值(在这种情况下为uniqid3)。

    你可以这样检查:

    $a=array(
    
    "apple"=>"uniqid1",
    "apple"=>"uniqid2",
    "apple"=>"uniqid3",
    "bannana"=>"uniqid4");
    
    var_dump($a);
    

    你会看到实际上只有两个条目:

    array(2) {
      ["apple"]=>
      string(7) "uniqid3"
      ["bannana"]=>
      string(7) "uniqid4"
    }
    

    如果您翻转值(将值用作键,反之亦然),这将正常工作,然后您可以搜索 apple。

    【讨论】:

    • 刚刚尝试过,它对所有内容都返回 NULL "apple", "uniqid2"=>"apple", "uniqid3"=>"apple" ,“uniqid4”=>“班纳纳”); echo array_search("uniqid3",$a, true); ?>
    • @Rob 你不能使用同一个索引,当你这样做的时候,PHP 会忽略前两个而只识别第三个。如果您尝试搜索 uniqid3,您会看到它正在工作,但如果您搜索 uniqid2uniqid1,它将无法正常工作, PHP 将忽略前两个,因为它与第三个具有相同的索引,只有第三个可以工作。
    • @Rob array_search() 在数组中搜索一个值,而不是一个键。要通过密钥访问条目,您甚至不需要它,只需使用密钥即可访问它,如下所示:$a['uniqid1']
    【解决方案3】:

    这是你的数组

    $a=array(
    "apple"=>"uniqid1",
    "apple"=>"uniqid2",
    "apple"=>"uniqid3",
    "bannana"=>"uniqid4");
    

    就是这个数组:

    $a=array(
    "apple"=>"uniqid3",
    "bannana"=>"uniqid4");
    

    您又将“apple”覆盖了 2 次。 因此,如果您搜索uniqid1uniqid2,您将得到空值,但如果您搜索uniqid3uniqid4,您将得到答案。

    定义一个数组后,你给"apple" =&gt; "uniqid1",但在下一行,你覆盖它给"apple"另一个值,"apple" =&gt; "uniqid2"

    之后,您再次为"apple" 提供第三个值"apple" =&gt; "uniqid3"

    所以"apple" 有这个值:"uniqid3"

    所以"uniqid1""uniqid2" 不再存在于您的数组中。

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 2013-08-29
      • 2018-12-23
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多