PHP Рекурсивно сбрасывают ключи массива если соответствие

Это обычно вызывается при использовании системы сборки как Муравей Apache , который только компилирует файлы Java, когда файл Java является более новым, чем файл класса. Если сигнатура метода изменяется, и классы использовали старые вещи версии, может не быть скомпилирован правильно. Обычная фиксация должна сделать, полное восстанавливает (обычно "муравей, чистый" тогда "муравей").

Иногда это может также быть вызвано при компиляции против одной версии библиотеки, но выполнении против различной версии.

9
задан soulmerge 17 November 2009 в 17:06
поделиться

6 ответов

Если вы хотите работать рекурсивно, вам нужно передать массив как ссылку , иначе вы будете делать много ненужного копирования:

function recursive_unset(&$array, $unwanted_key) {
    unset($array[$unwanted_key]);
    foreach ($array as &$value) {
        if (is_array($value)) {
            recursive_unset($value, $unwanted_key);
        }
    }
}
30
ответ дан 4 December 2019 в 06:26
поделиться

Мое предложение:

function removeKey(&$array, $key)
{
    if (is_array($array))
    {
        if (isset($array[$key]))
        {
            unset($array[$key]);
        }
        if (count($array) > 0)
        {
            foreach ($array as $k => $arr)
            {
                removeKey($array[$k], $key);
            }
        }
    }
}

removeKey($myarray, 'Part');
1
ответ дан 4 December 2019 в 06:26
поделиться

вы хотите array_walk

function remove_key(&$a) {
   if(is_array($a)) {
        unset($a['fields']);
        array_walk($a, __FUNCTION__);
   }
}
remove_key($myarray);
5
ответ дан 4 December 2019 в 06:26
поделиться
function sanitize($arr) {
    if (is_array($arr)) {
        $out = array();
        foreach ($arr as $key => $val) {
            if ($key != 'fields') {
                $out[$key] = sanitize($val);
            }
        }
    } else {
        return $arr;
    }
    return $out;
}

$myarray = sanitize($myarray);

Результат:

array (
  'Item' => 
  array (
    'Part' => 
    array (
    ),
  ),
  'Owner' => 
  array (
    'Company' => 
    array (
      'Locations' => 
      array (
        'State' => 
        array (
        ),
      ),
    ),
  ),
)
1
ответ дан 4 December 2019 в 06:26
поделиться

Попробуйте эту функцию. Он удалит ключи с 'полями' и оставит остальную часть массива.

function unsetFields($myarray) {
    if (isset($myarray['fields']))
        unset($myarray['fields']);
    foreach ($myarray as $key => $value)
        $myarray[$key] = unsetFields($value);
    return $myarray;
}
0
ответ дан 4 December 2019 в 06:26
поделиться

Рекурсивно обходить массив (по ссылке) и отключать соответствующие ключи.

clear_fields($myarray);
print_r($myarray);

function clear_fields(&$parent) {
  unset($parent['fields']);
  foreach ($parent as $k => &$v) {
    if (is_array($v)) {
      clear_fields($v);
    }
  }
}
-1
ответ дан 4 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: