【问题标题】:using in_array() with keys and values in arrays?将 in_array() 与数组中的键和值一起使用?
【发布时间】:2012-09-29 21:59:26
【问题描述】:

假设我有一个数组

$array = array(
            'username' => "username",
            'location' => "location",
            'other' => "other");

此数组可以保存许多用户的数据,因此每个“用户名”、“位置”和“其他”字段可能有不同的值。如何使用 in_array() 或其他函数来确定数组中是否已经存在特定用户名?因为如果用户的用户名像“nyc”和位置“nyc”,我会这样做

in_array("nyc", $array);

究竟应该如何处理这样的事情?

谢谢。

【问题讨论】:

  • in_array 仅对值起作用,即您在“=>”之后写的内容
  • 当有多个用户时,数组的结构是什么?

标签: php arrays


【解决方案1】:

要实现我认为你想要的东西,你可以创建一个具有相同键的关联数组的数组。

<?php
// This syntax will work only on PHP 5.4
$a=[["name"=>"john","age"=>25],["name"=>"philip","age"=>110]];
print_r(array_filter($a, function($item) {return $item["name"] === "john"; }));
?>

输出:

Array
(
    [0] => Array
        (
            [name] => john
            [age] => 25
        )

)

如果你只是想知道一个叫 John 的人是否在列表中,你可以在返回的数组上使用 sizeof/count。

这将允许您拥有任意数量的重复项,并且您无需指定任何键。查看函数:array_filter、array_reduce、array_map。有了所有这些,您就可以像上面的示例一样使用闭包来处理您的列表。

除了在你的数组中使用关联数组,你也可以有对象。对象更重,需要初始化和其他东西,所以将它们用于微小的静态(硬编码)列表是很奇怪的。但是当您的数据结构增长并且您希望确保每个列表项都具有特定属性时,它们可能会派上用场(类的构造函数可以确保一切都已初始化)。但好在 filter、reduce 和 map 仍然可以工作。 "$item" 就是你的对象。

【讨论】:

    【解决方案2】:
     $users = array( 'user_id' => array('username' => "username",
                                        'location' => "location",
                                        'other' => "other");
    

    user_id 是他们的 NUMBER 个 user_id

    然后你调用 $users['####']['username'];

    IE:

     $users = array( '1' => array('username' => 'Jim',
                                  'location' => 'Florida',
                                   'other' => "other"),
                     '2' => array('username' => 'Jane',
                                  'location' => 'Maryland',
                                   'other' => "Grapes"));
    

    然后使用 array_keys() 搜索他们的 user_id

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2016-03-24
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多