PHP:使用动态键删除数组的值

PHP:使用动态键删除数组的值,php,arrays,Php,Arrays,一个有点不寻常的用例,但也许您可以帮助: 我将一个值的键作为一个单独的数组。使用它很容易获得数组的值,如下所示: function whatEver(){ $array = array( 0 => array( 'other' ), 1 => array( 0 => array( 'other' ), 1 => array( 'value' ) ), );

一个有点不寻常的用例,但也许您可以帮助:

我将一个值的键作为一个单独的数组。使用它很容易获得数组的值,如下所示:

function whatEver(){

    $array = array(
        0 => array( 'other' ),
        1 => array(
            0 => array( 'other' ),
            1 => array( 'value' )
        ),
    );

    $keys = array(
        0 => '1',
        1 => '1'
    );

    $result = $array;

    foreach($keys as $key)
    {
        $result = $result[$key];
    }

    return $result;
}
这将返回正确的数组/值:

Array
(
    [0] => value
)
但是,如果我想从原始数组中删除此值,如unset$array[1][1],并返回没有此值的原始$array,该怎么办?

您尝试过使用unset$array[$key]吗?这将从数组中删除该键以及与其关联的任何值

这可能与以下内容重复:

您是否尝试过使用未设置的$array[$key]?这将从数组中删除该键以及与其关联的任何值


这可能与以下内容重复:

如果需要对任意数量的键执行此操作,则需要在每次迭代时通过引用分配$result,并在最后一步取消设置:

$result = &$array;
$last = array_pop($keys);

foreach ($keys as $key) {
  $result = &$result[$key];
}

unset($result[$last]);
请注意,您需要以与$last中存储的密钥稍有不同的方式处理最终密钥。如果您只是将引用设置为最后一级,unset将只删除引用,而不是实际的元素


请参见

如果需要对任意数量的键执行此操作,则需要在每次迭代中通过引用分配$result,并在最后一步取消设置:

$result = &$array;
$last = array_pop($keys);

foreach ($keys as $key) {
  $result = &$result[$key];
}

unset($result[$last]);
请注意,您需要以与$last中存储的密钥稍有不同的方式处理最终密钥。如果您只是将引用设置为最后一级,unset将只删除引用,而不是实际的元素


请参见

是否要删除键和值,还是仅删除值?我要删除键和值,并返回没有值的原始数组。是否取消设置$array[$Key][$Key];失败还是什么?看看这个:$array是动态的,我不知道它的结构$键也是动态的,可以有未知数量的值。这就是为什么我不能做一个简单的unset$array[$key][$key]。否则,我也可以在不使用foreach循环的情况下轻松获得值。所以我不认为这是重复的。但是,如果我缺少某些内容,请更正我…您是希望键和值消失,还是只希望值消失?我希望键和值消失,并返回没有值的原始数组。是否取消设置$array[$Key][$Key];失败还是什么?看看这个:$array是动态的,我不知道它的结构$键也是动态的,可以有未知数量的值。这就是为什么我不能做一个简单的unset$array[$key][$key]。否则,我也可以在不使用foreach循环的情况下轻松获得值。所以我不认为这是重复的。但是如果我遗漏了什么,请纠正我…问题是,$array和$key都是动态的,您不知道长度和结构。如果我取消设置$array[$key],那么我将始终删除多维数组第一级中的键。但它可能是在第10层,所以我需要密钥路径来删除它,就像数组[$key][$key][$key][$key][…]或其他什么。这就是为什么我在挣扎…:问题是,$array和$key都是动态的,您不知道长度和结构。如果我取消设置$array[$key],那么我将始终删除多维数组第一级中的键。但它可能是在第10层,所以我需要密钥路径来删除它,就像数组[$key][$key][$key][$key][…]或其他什么。这就是为什么我在挣扎…: