多维数组

3
有没有一种方法可以从任何位置访问多维数组?例如:
$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或title怎么办?

有两个任务:

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

如何以最佳方式完成这些任务?我已经有了3个数组:

1- id对应url

2- url对应id

3- id对应title

$id2url = array (

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

);

另外两个也是同样的过程。因此,我想通过合并这三个数组来优化我的代码。那么如何在给定的URL中访问ID和标题呢?

谢谢。

3个回答

2
你可能会寻找 array_flip() PHP手册,它可以让你的查找数组使用其值作为键:
$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];

对于像上面那样的三元数组呢? - medk
1
那样行不通,键只能是整数或字符串,而不能是数组。因此,您需要一个作为查找哈希的工作数组。它是您多维数组的索引。 - hakre
这是一个通用的搜索问题 - 标准方法是构建倒排索引,这就是array_flip()在这里所做的。如果你的数组相对较小,你可能不关心O(n)查找...否则,如果这是从数据库中提取的数据,你可以在URL列上添加索引。 - fearlesstost

1
你可以这样使用array_search:
$id = array_search($url, $url2id);

0

我认为有一种更简单的方法来处理这个问题。如果您已经拥有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是唯一的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接