是否有从任何位置访问多维数组的方法?例子:
$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到title
$id2url = array (
1 => 'some-url-one',
2 => 'some-url-two',
3 => 'some-url-three'
);
和其他两个是相同的过程。所以我想通过组合这三个数组来优化我的代码。那么如何访问给定url的id和标题呢?
谢谢。
您可以查找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_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在每种情况下都是唯一的