ultimo objeto multidimensional eliminar elementos elemento ejemplos buscar array agregar arrays multidimensional-array elements

arrays - objeto - PHP-eliminar elemento en matriz multidimensional



eliminar un objeto php (2)

Tengo esta matriz:

Array ( [0] => Array ( [0] => b [1] => d [2] => **c** [3] =>a [4] => ) [1] => Array ( [0] => **c** [1] => a [2] => d [3] => [4] => ) [2] => Array ( [0] => b [1] => d [2] => a [3] => [4] => ) [3] => Array ( [0] => **c** [1] => d [2] => a [3] =>b [4] => ) )

y necesita eliminar (¿deshacer?) todos los elementos donde el valor es "c" para que uno termine con:

Array ( [0] => Array ( **[0] => b [1] => d [2] => a [3] => [4] =>** ) [1] => Array ( **[0] => a [1] => d [2] => [3] =>** ) [2] => Array ( [0] => b [1] => d [2] => a [3] => [4] => ) [3] => Array ( **[0] => d [1] => a [2] =>b [3] =>** ) )

El elemento se elimina y los otros elementos se desplazan hacia arriba. Sé que unset no vuelve a indexar la matriz. No se puede configurar para todas las matrices multidimensionales, pero solo con una matriz. ¿Pueden las matrices volver a indexarse ​​después? Lo aprecio.

El código ABAJO elimina los elementos donde el valor es igual a "c" pero el índice del primer elemento no se vuelve a indexar. ¿Alguien puede sugerir una solución para volver a indexar las matrices internas?

$i=0; foreach ($array as $val) { foreach ($val as $key => $final_val) { if ($final_val =="$search_value") { unset($array[$i][$key]); } } i = $i + 1; }


Busque el valor en la matriz secundaria y luego desactívelo.

$search = ''c''; $result = array_map(function ($value) use ($search) { if(($key = array_search($search, $value)) !== false) { unset($value[$key]); } return $value; }, $your_array);

O podrías usar un loop también:

// this way change your original array foreach ($your_array as &$sub_array) { if(($key = array_search($search, $sub_array)) !== false) { unset($sub_array[$key]); } } var_dump($your_array);


El siguiente código hará lo que quieras:

<?php $a = 1; $b = 2; $c = 3; $d = 4; $arr = array( array ( $b, $d, $c, $a, $b), array ($c, $a), array ( $b, $d, $c ), array( $c, $d, $a, $b, $b) ); echo "before:/n"; print_r($arr); foreach($arr as $k1=>$q) { foreach($q as $k2=>$r) { if($r == $c) { unset($arr[$k1][$k2]); } } } echo "after:/n"; print_r($arr); ?>

Salida:

before: Array ( [0] => Array ( [0] => 2 [1] => 4 [2] => 3 [3] => 1 [4] => 2 ) [1] => Array ( [0] => 3 [1] => 1 ) [2] => Array ( [0] => 2 [1] => 4 [2] => 3 ) [3] => Array ( [0] => 3 [1] => 4 [2] => 1 [3] => 2 [4] => 2 ) ) after: Array ( [0] => Array ( [0] => 2 [1] => 4 [3] => 1 [4] => 2 ) [1] => Array ( [1] => 1 ) [2] => Array ( [0] => 2 [1] => 4 ) [3] => Array ( [1] => 4 [2] => 1 [3] => 2 [4] => 2 ) )

Como puede ver, todos los 3 han ido ...