@Dmitrue888

Как удалить из массива?

есть массив вида

$arr[1]['one']="1";
$arr[1]['twoo']="2";

unset($arr[1]['one']) удаляет ключ со значением а при передаче тех же данных через переменную

$del = $arr[1]['one'];
unset($del) ничего не происходит
  • Вопрос задан
  • 219 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега PHP
♬♬
Так вы только копируете значение (строку  "1") из подмассива в переменную:
$del = $arr[1]['one'];
В переменную $del записался байт ASCII-сивола "1", условно говоря.

unset здорового человека именно такой: unset($arr[1]['one'])

unset курильщика можно организовать записью ссылки на массив в переменную. Но конкретный ключ всё равно придётся указывать внутри unset:
$arr = [ 1 => [
    'one' => '111',
    'two' => '222',
],  ];

$del = & $arr[1]; // ссылка на массив
unset($del['one']); // удаление ключа из массива по ссылке

print_r($arr); // результат Array ( [1] => Array ( [two] => 222 ) )


Попытка удалить полную ссылку на элемент не сработает, т.к. она просто удалит "связь" этой переменной $del с элементом исходного массива. А массив останется без изменений.
$del = & $arr[1]['one']; // ссылка на элемент, который хочется удалить
unset($del); // не сработает. Просто разорвёт ссылку $del на элемент
Ответ написан
unset($arr[1]['one'])

Так и удалять

Если смущает отсутствие ключа в результате, можно заменить значение на null:
$arr[1]['one'] = null;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
cyber-jet
@cyber-jet
Если нужно в цикле удалить
$arr[1]['one'] = "1";
$arr[1]['two'] = "2";

echo '<pre>';
print_r($arr);
echo '</pre>';

// Array
// (
//     [1] => Array
//         (
//             [one] => 1
//             [two] => 2
//         )
// )

echo '<form method="POST">';
foreach ($arr as $key => $row) {
	foreach ($row as $val => $name) {
		echo "<button name='del[$key]' value='$val'/>удалить $name</button>";
	}
}
echo "</form>";

if ($_POST && $_POST['del'] && is_array($_POST['del'])) {

	echo '<pre>';
	print_r($_POST['del']);
	echo '</pre>';

	// Array
	// (
	//     [1] => one
	// )

	foreach ($_POST['del'] as $k => $v) {
		unset($arr[$k][$v]);
	}
}

echo '<pre>';
print_r($arr);
echo '</pre>';

// Array
// (
//     [1] => Array
//         (
//             [two] => 2
//         )
// )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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