2015-06-01 5 views
-1

У меня есть многомерный массив и массив, который содержит ключи к определенному элементу в этом многомерном массиве. Как я могу отключить этот элемент, основываясь на массиве с ключами. Я ищу код, который может работать независимо от размеров массива.php delete element на основе массива ключей

Вот пример:

<?php 
$array = array(
    1 => array('name' => 'mike','age' => 23), 
    2 => array('name' => 'nick','age' => 18), 
); 

$keys = array(2,'name'); 

// 
//Here code to unset that element 
// 

/* 
//This is how the new array should be: 
$array = array(
    1 => array('name' => 'mike','age' => 23), 
    2 => array('age' => 18), 
); 
*/ 
?> 

Edit: Приведенный выше код для clearity. Я могу добавить то, что я пробовал с unset() до сих пор, но это не что-то полезное и сделает вопрос менее ясным. Я прошу намек в правильном направлении, а не полностью рабочий код.

+0

Это был просто пример кодирования для обеспечения более объяснение. Я не прошу, чтобы кто-нибудь написал код для меня, но я просто добавил его так, чтобы было ясно, что я ищу. Мне нужно, чтобы кто-то указал мне в правильном направлении, так как я перепутал с unset(), но не смог получить ничего полезного. Самое главное при написании вопроса - это ясно, вот почему я добавил код, подобный этому. Пожалуйста, будьте разумными и удалите свой -1. – user4493177

ответ

1

Я нашел решение:

<?php 

function unsetByKeys($keys,&$array,$path = array()){ 

    $diff = count($keys)-count($path); 
    if($diff > 1){ 
     $path[] = $keys[count($path)]; 
     unsetByKeys($keys,$array,$path); 
    }else{ 
     $lastKey = $keys[count($path)]; 

     $subArray = &$array; 
     foreach($path AS $p){ 
      $subArray = &$subArray[$p]; 
     } 
     unset($subArray[$lastKey]); 
    } 
} 

$array = array(
    1 => array('name' => 'mike','age' => 23), 
    2 => array('name' => 'nick','age' => 18), 
); 

$keys = array(2,'name'); 

unsetByKeys($keys,$array); 

var_dump($array); 
?> 
+0

В следующий раз задайте правильный вопрос, поэтому я не буду тратить свое время. – Falt4rm

-1

Код: (http://www.tehplayground.com/#9Oup7h6gh)

// example code 

$array = array(
1 => array('name' => 'mike','age' => 23), 
2 => array('name' => 'nick','age' => 18), 
); 

$keys = array(2,'name'); 

unset($array[($keys[0])][($keys[1])]); 

print_r($array); 

/* 
//This is how the new array should be: 
$array = array(
    1 => array('name' => 'mike','age' => 23), 
    2 => array('age' => 18), 
); 
*/ 

ВЫВОД:

Array 
(
[1] => Array 
    (
     [name] => mike 
     [age] => 23 
    ) 

[2] => Array 
    (
     [age] => 18 
    ) 

) 
+0

Привет, спасибо за ответ. Это то, что им нужно искать, но только тогда для переменного количества ключей. Таким образом, массив может также иметь 3 уровня (и ключи 3-х ключей). В принципе, мне нужно знать, как это получить: $ array [($ keys [0])] [($ keys [1])] с переменным количеством ключей. – user4493177

+0

U может предоставить правильный пример ... – Falt4rm

Смежные вопросы