取消设置多维数组,其中indexis表示为字符串

时间:2014-11-05 12:08:49

标签: php arrays multidimensional-array

我有一个看起来像这样的数组:

'coilovers' => 
  'strut_and_individual_components' => 
      'complete_strut' => 
          0 => 
            array (size=5)
              'achse' => string 'Oś tylnia' (length=10)
              'position' => string 'Prawo' (length=5)
              'material' => string 'Stal' (length=4)
              'variante' => string 'Wariant 3' (length=9)
              'img' => string 'gewindefahrwerk_federbein_komplett_level3.png'         
'hls_components' =>
  'assembly_pump_unit' => 
      0 => 
          'achse' => string 'Assembly pump unit' (length=18)
          'img' => string 'hls_komponenten_baugruppe_pumpeneinheit_level3.png'     

现在我正在获取字符串参数,例如:[coilovers] [strut_and_individual_components] [complete_strut] [0]

现在我想基于该参数取消设置该数组的整个分支。到目前为止,我已经完成了如何读取值但该参数看起来像。

private function str_index_array(&$arr, $indexes) {

    $arr_indexes = explode('][',trim($indexes,'[]'));

    $session_array = &$arr;
    foreach($arr_indexes as $index) {
        $session_array = &$session_array[$index];
    }

}

但是现在我被困了,我需要检查该元素是否是数组中的最后一个元素,而前一个元素是前一个元素是空的,如果它是空的未设置整个早午餐。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我确信一些PHP /数组/参考专家可以提出更好的方法来做到这一点,但这是一个错误的解决方案。我已经设置了一个循环来获取对最后但第二级索引的引用,并从那里测试和删除子索引。请注意,在使用索引之前,没有错误检查来测试索引是否实际存在。

<?php

$a = array (
       'coilovers' => array (
         'strut_and_individual_components' => array (
           'complete_strut' => array (
             0 => array (
               'achse' => 'Os tylnia',
               'position' => 'Prawo',
               'material' => 'Stal',
               'variante' => 'Wariant 3',
               'img' => 'gewindefahrwerk_federbein_komplett_level3.png'
             )
           )
         )
       ),
       'hls_components' => array (
         'assembly_pump_unit' => array (
           0 => array (
            'achse' => 'Assembly pump unit',
            'img' => 'hls_komponenten_baugruppe_pumpeneinheit_level3.png'  
           )
         )
       )
     );

function delete_index (&$arr, $indexes) {

    $arr_indexes = explode('][',trim($indexes,'[]'));

    for ($i = 0; $i < count($arr_indexes) - 2; $i++) {
      $arr = &$arr[$arr_indexes[$i]];
    }
    $ix1 = $arr_indexes[$i];
    $ix2 = $arr_indexes[$i+1];

    unset ($arr[$ix1][$ix2]);
    if (empty ($arr[$ix1]))
      unset ($arr[$ix1]);
}

print_r ($a);
delete_index ($a, '[coilovers][strut_and_individual_components][complete_strut][0]');
print_r ($a);