【问题标题】:multidimensional array多维数组
【发布时间】:2011-10-03 15:48:48
【问题描述】:

有没有办法从任何位置访问多维数组?示例:

$arr = array (

    1 => array ( 1, 'some-url-one', 'Some Title One' ),

    2 => array ( 2, 'some-url-two', 'Some Title Two' ),

    3 => array ( 2, 'some-url-three', 'Some Title Three' ),

);

然后,如果我们有一个项目的 id,例如 2,并且想要获取该项目的标题,我们只需使用:

$title = $arr[2][2]; // which outputs Some Title Two

如果我们想获取同一个项目的 url,我们只需使用:

$title = $arr[2][1];  // which outputs some-url-two

但是如果我们有 URL (some-url-two) 并且想要获取该项目的 id 或标题怎么办?

有两个义务:

1- 遍历数组并检查该 URL 是否存在 2- 获取 id 和标题

如何做到最好?我已经有 3 个数组:

1- id 到 url

2- url 到 id

3- id 到标题

$id2url = array (

    1 => 'some-url-one',
    2 => 'some-url-two',
    3 => 'some-url-three'

);

另外两个是同样的程序。所以我想通过组合 3 个数组来优化我的代码。那么如何使用给定的 url 访问 id 和 title 呢?

谢谢。

【问题讨论】:

    标签: php arrays multidimensional-array associative-array


    【解决方案1】:

    我认为有一种更简单的方法来处理这个问题。如果您已经拥有 URL,那么您可能已经在所有数据的父数组中拥有索引。在这种情况下,您可以简单地使用它来访问它

    $found_id = $arr[$known_parent_idx][0];
    $found_title = $arr[$known_parent_idx][2];
    

    但是,如果您没有该索引,则可以像这样进行基于循环的检查。 假设你在这个多维数组中循环,这就是它的工作原理。

    foreach ($arr AS $idx => $subarr)
    {
      if ($subarr[1] == $known_url)
      {
        $found_id = $subarr[0];
        $found_title = $subarr[2];
      }
    }
    

    现在,如果 URL 也是父索引,您可以更轻松地完成此操作。在这种情况下,我们谈论的是关联数组。这是一个可能更有帮助的结构。

    $arr = array (
      'some-url-one' => array ( 'id' => 1, 'title' => 'Some Title One' ),
      'some-url-two' => array ( 'id' => 2, 'title' => 'Some Title Two' ),
      'some-url-three' => array ( 'id' => 2, 'title' => 'Some Title Three' ),
    );
    

    这将使您无需任何搜索即可立即找到您要查找的内容。但这要求 URL 在每种情况下都是唯一的。

    【讨论】:

      【解决方案2】:

      您可能会寻找array_flip() PHP Manual,它会让您的查找数组使用它们的值作为键:

      $id2url = array (
      
          1 => 'some-url-one',
          2 => 'some-url-two',
          3 => 'some-url-three'
      
      );
      
      $url2id = array_flip($id2url); // keys will become values, and values keys.
      
      $id = $url2id[$url];
      
      $title = $arr[$id][2];
      

      【讨论】:

      • 对于上述的三人组数组?
      • 那不行,键只能是整数或字符串,不能是数组。所以你需要一个数组作为查找哈希。它是您的多维数组的索引。
      • 这是一个一般的搜索问题——标准的方法是建立一个倒排索引,这就是 array_flip() 在这里所做的。如果您的数组相对较小,您可能不关心 O(n) 查找...否则,如果这是从数据库中提取的数据,您可以在 URL 列上添加索引。
      【解决方案3】:

      你可以像这样使用array_search:

      $id = array_search($url, $url2id);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        相关资源
        最近更新 更多