Подскажите, пожалуйста, как работает рекурсия, и как написать такую функцию, чтоб она могла проходить по всему массиву и удалить определённый элемент. Или просто дайте, пожалуйста, пример такой функции. Остальное я сам сделаю, я не могу понять, как это должно работать. Спасибо.
(
[0] => Array
(
[0] => Array
(
[0] => text
[1] => created_ad
)
[1] => required
)
[1] => Array
(
[0] => Array
(
[0] => id_user
[1] => priority
[2] => status
[3] => created_ad
)
[1] => integer
)
[2] => Array
(
[0] => Array
(
[0] => text
[1] => img
)
[1] => string
)
[3] => Array
(
[0] => id_user
[1] => safe
)
[4] => Array
(
[0] => priority
[1] => default
[value] => 0
)
[5] => Array
(
[0] => status
[1] => default
[value] => 0
)
[6] => Array
(
[0] => priority
[1] => in
[range] => Array
(
[0] => 0
[1] => 1
[2] => 2
)
)
[7] => Array
(
[0] => status
[1] => in
[range] => Array
(
[0] => 0
[1] => 1
[2] => 2
)
)
)
Из этого массива нужно удалить id_user и created_ad
private function unsetRules($rules = null)
{
foreach ($rules as $key => &$rule) {
if (is_array($rules[$key])) {
$this->unsetRules($rules[$key]);
}
if ($rules[$key] === 'id_user') {
unset($rules[$key]);
}
}
return $rules;
}
Вот так ничего не выходит=(
private function unsetRules(&$array)
{
foreach ($array as $key => &$value) {
if (is_array($value)) {
$this->unsetRules($value);
} else {
if (in_array($array[$key], $this->deleteRules())) {
unset($array[$key]);
}
}
}
}
Все получается довольно просто, нужно было использовать массив по ссылке
Наверное, так:
foreach ($array as $i => $value) {
if ($array[$i] == 0) {
unset($array[$i]);
}
}
Только каким боком тут рекурсия?
Рекурсивная функция обращается сама к себе, при необходимости и выполняет проверку по новым элементам, пример проверки элементов по рекурсией по вложенным объектам:
// рекурсивная функция проверки
function arrayChecking(array $some_array){
foreach ($some_array as $key=>$value){
if(is_array($value)){
arrayChecking($value); // здесь рекурсивный вызов функцией самой себя, с новым вложенным массивом, когда функция закончит его обрабатывать, она вернется к месту прерывания и продолжит работу с родительским массивом и т.д.
}
if($value == "ваше значение"){
// ваше действие
}
}
}
$array_for_checkig = array();
arrayChecking($array_for_checkig);
Как удалить рекурсией не подскажу. Нужно додумать. Если нужно удалить элемент массива по значению, то в простом массиве делается следующим образом:
$array = array('key1' => 'Item 1', 'key2' => 'Item 2','Key3' => 'Всякая фигня');
if(($key = array_search('Всякая фигня',$array)) !== FALSE){
unset($array[$key]);
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый деньПосле некоторых манипуляций страница на моем сайте выдает следующий JSON:
ЗдравствуйтеКак во всем тексте заменить символ точки, который стоит только внутри самого слова?