Question:
Date: 20-03-2019 19:41:13
(In Spanish)
Espero que esten bien.
Tengo un problema que no he podido resolver el cual es el siguiente.
Tengo 2 arrays cuyos valores en cada uno son numéricos y únicos (no se repiten dentro del array)
Un array $listaTRPtotal donde contiene números del 2001 al 2071 generados por un for. Es decir una tabla numérica del 2001 al 2071. Son valores fijos que no serán modificados. Son 71 elementos.
Otro array $TRP la cantidad de elementos son variables y cuyo valores tambien son variables porque depende de una respuesta de una API, para hacerlo mas facil expondré un array de ejemplo.
Necesito eliminar los elementos del array $listaTRPtotal cuyo valores esten presentes en el array $TRP
Código:

El array $listaTRPtotal deberia ser similar al de la imagen sin los valores marcado en rojo que son los valores del array $TRP
Entre otras cosas he probado con array_diff() y no resuelve el caso ya que sirve para otra utilidad la función.
Si se les ocurre otra idea de en vez de eliminar elementos es bienvenida.
Muchas gracias por la atención.
Quedo en la espera de respuesta
Saludos
Votes: 0 - Answers: 5 - Views: 12 Share on: Google Facebook Twitter LinkedIn Link
Eliminar elementos de un array si está presente valores de otro array[Resolved]
Hola a todos.Espero que esten bien.
Tengo un problema que no he podido resolver el cual es el siguiente.
Tengo 2 arrays cuyos valores en cada uno son numéricos y únicos (no se repiten dentro del array)
Un array $listaTRPtotal donde contiene números del 2001 al 2071 generados por un for. Es decir una tabla numérica del 2001 al 2071. Son valores fijos que no serán modificados. Son 71 elementos.
Otro array $TRP la cantidad de elementos son variables y cuyo valores tambien son variables porque depende de una respuesta de una API, para hacerlo mas facil expondré un array de ejemplo.
Necesito eliminar los elementos del array $listaTRPtotal cuyo valores esten presentes en el array $TRP
Código:
// genero un array de 71 elementos cuyo valores tendrán del 2001 al 2071
for ($x=0;$x<=70;$x++){
$listaTRPtotal[$x] =2001+ $x;
}
// Array variable
$TRP[] =2003;
$TRP[] =2019;
$TRP[] =2090;
echo "Array total<br>";
print_r($listaTRPtotal);
echo '<hr>';
echo "Array variable<br>";
print_r($TRP);

El array $listaTRPtotal deberia ser similar al de la imagen sin los valores marcado en rojo que son los valores del array $TRP
Entre otras cosas he probado con array_diff() y no resuelve el caso ya que sirve para otra utilidad la función.
$listaTRPfail = array_diff($TRP, $listaTRPtotal);
Si se les ocurre otra idea de en vez de eliminar elementos es bienvenida.
Muchas gracias por la atención.
Quedo en la espera de respuesta
Saludos
Votes: 0 - Answers: 5 - Views: 12 Share on: Google Facebook Twitter LinkedIn Link
Answers:
-
Date: 21-03-2019 01:41:42 Me parece raro lo que informas de que array_filter no te elimine la secuencia dada, ya que si hago esto, el array resultante es el original sin los elementos de $TRP, imagino ha de haber sido porque invertiste los arreglos en array_diff.
$listaTRPtotal = []; for ($x=0;$x<=70;$x++){ $listaTRPtotal[$x] =2001+ $x; } var_dump($listaTRPtotal); $TRP = [2003,2019,2070]; $filtro = array_diff($listaTRPtotal,$TRP); var_dump($filtro);

en caso contrario, se me ocurre crearte un metodo y utilizar array_search para la tarea, algo así:
$listaTRPtotal = []; for ($x=0;$x<=70;$x++){ $listaTRPtotal[$x] =2001+ $x; } $TRP = [2003,2019,2070]; function removeItem(int $value){ global $listaTRPtotal; $key = array_search($value,$listaTRPtotal); if($key){ unset($listaTRPtotal[$key]); return true; }else{ return false; } } foreach($TRP as $item){ var_dump(removeItem($item)); } var_dump($listaTRPtotal);
Esto nos daría como resultado un array sin los elementos repetidos.
Espero te sirva, si se me ocurre alguna otra cosa, con gusto la agrego. Votes: 1 - Link answer -
Date: 21-03-2019 05:17:23 Lo primero que se me viene a la mente es esto:
foreach($listaTRPtotal as $i) if(!in_array($i, $TRP)) $result[] = $i; print_r($result);
:D Votes: 1 - Link answer -
Date: 21-03-2019 09:27:35 Hola Walter,
Podrías clarificar la razón por la que array_diff no es lo que buscas?
En mi caso es la solución más sencilla que funciona con tu ejemplo:
<?php // genero un array de 71 elementos cuyo valores tendrán del 2001 al 2071 for ($x=0;$x<=70;$x++){ $listaTRPtotal[$x] =2001+ $x; } // Array variable $TRP[] =2003; $TRP[] =2019; $TRP[] =2090; echo "Array total<br>"; print_r($listaTRPtotal); echo '<hr>'; echo "Array variable<br>"; print_r($TRP); echo 'Array sin valores de TRP:<br/>'; print_r(array_values(array_diff($listaTRPtotal, $TRP)));Votes: 1 - Link answer -
Date: 21-03-2019 18:20:56 Muchas gracias a Carlos, Jorge, Ernesto por responder contribuyendo con sus conocimientos.
Ire probando cada una de sus sugerencias y les iré dando mi feedback a la medida que lo vaya probando.
Mas Tarde probare el codigo de Jorge
Ernesto:
Con respecto del uso de array_diff no tengo nada en su contra, es lo primero que intente utilizar, es porque he probado varias formas y no me ha dado resultado, dicho esto, por ejemplo he probado tu codigo y funciona correctamente pero al intentarlo de implementar en mi codigo no funciona por alguna razón que no me doy cuenta su porque.

En el codigo que utilizo falla con el array TRP que tengo.
$listaTRPfail = array_values(array_diff($listaTRPtotal, $TRP));

Array TRP es el que obtuve en este momento de la cuasi API
Array Total Array ( [0] => 2001 [1] => 2002 [2] => 2003 [3] => 2004 [4] => 2005 [5] => 2006 [6] => 2007 [7] => 2008 [8] => 2009 [9] => 2010 [10] => 2011 [11] => 2012 [12] => 2013 [13] => 2014 [14] => 2015 [15] => 2016 [16] => 2017 [17] => 2018 [18] => 2019 [19] => 2020 [20] => 2021 [21] => 2022 [22] => 2023 [23] => 2024 [24] => 2025 [25] => 2026 [26] => 2027 [27] => 2028 [28] => 2029 [29] => 2030 [30] => 2031 [31] => 2032 [32] => 2033 [33] => 2034 [34] => 2035 [35] => 2036 [36] => 2037 [37] => 2038 [38] => 2039 [39] => 2040 [40] => 2041 [41] => 2042 [42] => 2043 [43] => 2044 [44] => 2045 [45] => 2046 [46] => 2047 [47] => 2048 [48] => 2049 [49] => 2050 [50] => 2051 [51] => 2052 [52] => 2053 [53] => 2054 [54] => 2055 [55] => 2056 [56] => 2057 [57] => 2058 [58] => 2059 [59] => 2060 [60] => 2061 [61] => 2062 [62] => 2063 [63] => 2064 [64] => 2065 [65] => 2066 [66] => 2067 [67] => 2068 [68] => 2069 [69] => 2070 [70] => 2071 [71] => 2072 ) Array TRP Array ( [0] => 2002 [1] => 2003 [2] => 2004 [3] => 2005 [4] => 2006 [5] => 2007 [6] => 2008 [7] => 2009 [8] => 2010 [9] => 2011 [10] => 2012 [11] => 2013 [12] => 2014 [13] => 2015 [14] => 2016 [15] => 2017 [16] => 2018 [17] => 2019 [18] => 2021 [19] => 2022 [20] => 2023 [21] => 2024 [22] => 2025 [23] => 2026 [24] => 2027 [25] => 2028 [26] => 2029 [27] => 2030 [28] => 2031 [29] => 2032 [30] => 2033 [31] => 2035 [32] => 2036 [33] => 2037 [34] => 2038 [35] => 2039 [36] => 2041 [37] => 2042 [38] => 2043 [39] => 2044 [40] => 2045 [41] => 2046 [42] => 2047 [43] => 2049 [44] => 2050 [45] => 2053 [46] => 2054 [47] => 2055 [48] => 2056 [49] => 2057 [50] => 2058 [51] => 2060 [52] => 2062 [53] => 2063 [54] => 2065 [55] => 2066 [56] => 2068 [57] => 2069 [58] => 2070 [59] => 2071 ) Array diferencial Array ( [0] => 2001 [1] => 2002 [2] => 2003 [3] => 2004 [4] => 2005 [5] => 2006 [6] => 2007 [7] => 2008 [8] => 2009 [9] => 2010 [10] => 2011 [11] => 2012 [12] => 2013 [13] => 2014 [14] => 2015 [15] => 2016 [16] => 2017 [17] => 2018 [18] => 2019 [19] => 2020 [20] => 2021 [21] => 2022 [22] => 2023 [23] => 2024 [24] => 2025 [25] => 2026 [26] => 2027 [27] => 2028 [28] => 2029 [29] => 2030 [30] => 2031 [31] => 2032 [32] => 2033 [33] => 2034 [34] => 2035 [35] => 2036 [36] => 2037 [37] => 2038 [38] => 2039 [39] => 2040 [40] => 2041 [41] => 2042 [42] => 2043 [43] => 2044 [44] => 2045 [45] => 2046 [46] => 2047 [47] => 2048 [48] => 2049 [49] => 2050 [50] => 2051 [51] => 2052 [52] => 2053 [53] => 2054 [54] => 2055 [55] => 2056 [56] => 2057 [57] => 2058 [58] => 2059 [59] => 2060 [60] => 2061 [61] => 2062 [62] => 2063 [63] => 2064 [64] => 2065 [65] => 2066 [66] => 2067 [67] => 2068 [68] => 2069 [69] => 2070 [70] => 2071 [71] => 2072 )
Con el codigo de Carlos me sucede exactamente lo mismo que con el codigo de Ernesto en mi codigo real falla. Es básicamente con lo que he probado antes de postear mi pregunta.
¿Pueden darse cuenta en qué puede fallar?
Muchas Gracias
Saludos Votes: 0 - Link answer -
Date: 21-03-2019 20:28:30 He probado el codigo de Jorge
for ($x=0;$x<=$totalPark-1 ;$x++){ $listaTRPtotal[$x] =2001+ $x; } $TRP[] =2003; $TRP[] =2019; $TRP[] =2070; $listaTRPfail = array_values(array_diff($listaTRPtotal, $TRP)); foreach($listaTRPtotal as $i) if(!in_array($i, $TRP)) $result[] = $i;; $listaTRPfail = $result; echo "Array Total<br>"; print_r($listaTRPtotal); echo '<hr>'; echo "Array TRP<br>"; print_r($TRP); echo '<hr>'; echo "Array diferencial<br>"; print_r($listaTRPfail);

El codigo propuesto me funciona correctamente en mi proyecto.
Muchas gracias Jorge por tu solución Una solución distinta y elegante podría decir.
No me quisiera quedar con la duda de porque no me estaría funcionando los códigos de Ernesto y de Carlos, Debería funcionar con array_diff()
Muchas gracias por todas las respuestas
Saludos Votes: 1 - Link answer
To actively participate in the community first must authenticate, enter the system.Sign In
