Php 如何通过另一个线性数组中的键访问多维数组的元素?
我们有一个多维关联数组。有必要在一个键上寻址到数组的一个元素,该键被写在另一个线性数组中 也就是说,有一个多维数据数组和一个带键的线性数组:Php 如何通过另一个线性数组中的键访问多维数组的元素?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我们有一个多维关联数组。有必要在一个键上寻址到数组的一个元素,该键被写在另一个线性数组中 也就是说,有一个多维数据数组和一个带键的线性数组: $a=[ 'animals'=> [ 'cats' => [ 'catusdomesticus' => 'home', 'pantera' => 'wild' ] ] ]; $keys=['animals', 'cats', 'pantera']; 有两件事要做: (简单)获得$a
$a=[
'animals'=> [
'cats' => [
'catusdomesticus' => 'home',
'pantera' => 'wild'
]
]
];
$keys=['animals', 'cats', 'pantera'];
有两件事要做:
$item =& $a;
foreach($keys as $key)
$item =& $item[$key];
var_dump( $item );
对于remove元素,我尝试下一个代码:
$item =& $a;
for($i=0; $i<count($keys); $i++)
{
$item =& $item[$keys[$i]];
if($i===count($keys)-1) {
echo "\nDelete element:\n";
var_dump($item);
unset($item);
}
}
var_dump( $a );
这里有两种方法,我假设第二种方法能最好地解决这个问题
<?php
$a=[
'animals'=> [
'cats' => [
'catusdomesticus' => 'home',
'pantera' => 'wild'
]
]
];
$keys=['animals', 'cats', 'pantera'];
//Method 1, excplicitly say which associative values you want
echo $a[$keys[0]][$keys[1]][$keys[2]];
echo "<br/>";
//Method 2 use a loop and keep going down
$holder = $a;
foreach($keys as $key){
$holder=$holder[$key];
}
echo $holder;
?>
我们可以使用带有小调整的引用删除数组值
$a=[
'animals'=> [
'cats' => [
'catusdomesticus' => 'home',
'pantera' => 'wild'
]
]
];
$keys=['animals', 'cats', 'pantera'];
$delItem = &$a;
foreach($keys as $key=>$val){
if($key == count($keys)-1)
$lastKey = $val;
else
$delItem = &$delItem[$val];
}
echo $delItem[$lastKey];//Get Value
unset($delItem[$lastKey]);//Remove Value
print_r($a);`
为什么键不应该在新数组中?有原因吗?你试过什么?1.你必须自己试一试。如果有什么不对劲,你就来这里向我们求助。3.祝你好运@Tobias F,阵列的结构事先未知。它有无限的嵌套深度和无限的兄弟元素。@MateiMihai,有关递归方法,请参阅更新+1!!我写了一些类似于早上热身运动的东西,但你写得更快。当你回答一个问题时,你应该简单描述一下它的作用和原因,目的是帮助人们从答案中学习,而不仅仅是给他们代码。这是对简单问题的回答。如何删除元素?方法1不正确。此代码取决于键数组大小。如何使get
$keys=['animals','cats']?
和如何使用方法2删除元素?
<?php
$a=[
'animals'=> [
'cats' => [
'catusdomesticus' => 'home',
'pantera' => 'wild'
]
]
];
$keys=['animals', 'cats', 'pantera'];
//Method 1, excplicitly say which associative values you want
echo $a[$keys[0]][$keys[1]][$keys[2]];
echo "<br/>";
//Method 2 use a loop and keep going down
$holder = $a;
foreach($keys as $key){
$holder=$holder[$key];
}
echo $holder;
?>
$a=[
'animals'=> [
'cats' => [
'catusdomesticus' => 'home',
'pantera' => 'wild'
]
]
];
$keys=['animals', 'cats', 'pantera'];
$delItem = &$a;
foreach($keys as $key=>$val){
if($key == count($keys)-1)
$lastKey = $val;
else
$delItem = &$delItem[$val];
}
echo $delItem[$lastKey];//Get Value
unset($delItem[$lastKey]);//Remove Value
print_r($a);`