有没有办法从任意位置访问多维数组?示例:
$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 或标题怎么办?
有 2 项义务:
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 和标题呢?
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];
您可以像这样使用 array_search:
$id = array_search($url, $url2id);
我认为有一种更简单的方法来处理这个问题。如果您已经拥有 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 在每种情况下都是唯一的。