Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Restar a todos los elementos de un arreglo

Estas en el tema de Restar a todos los elementos de un arreglo en el foro de PHP en Foros del Web. Estimados foros del web: Existe alguna forma de restar un numero a todos los elementos de un arreglo? por ejemplo, tengo el arreglo $a=[21,25,29] y ...
  #1 (permalink)  
Antiguo 29/05/2014, 13:28
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Restar a todos los elementos de un arreglo

Estimados foros del web:

Existe alguna forma de restar un numero a todos los elementos de un arreglo?

por ejemplo, tengo el arreglo $a=[21,25,29]

y quiero restarle a todos 20 quedando así:

$a=[1,5,9]

Se que puedo recorrerlo usando un foreach, pero me gustaría saber si hay alguna forma más eficiente.

Saludos!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #2 (permalink)  
Antiguo 29/05/2014, 13:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Restar a todos los elementos de un arreglo

Código PHP:
Ver original
  1. <?php
  2.  
  3. $a = [21,25,29];
  4. $b = array_map(function($e){return $e-20;},$a);
  5.  
__________________
Salu2!
  #3 (permalink)  
Antiguo 29/05/2014, 13:52
Avatar de juan_14nob  
Fecha de Ingreso: abril-2010
Mensajes: 552
Antigüedad: 14 años
Puntos: 6
Respuesta: Restar a todos los elementos de un arreglo

Cita:
Iniciado por Italico76 Ver Mensaje
Código PHP:
Ver original
  1. <?php
  2.  
  3. $a = [21,25,29];
  4. $b = array_map(function($e){return $e-20;},$a);
  5.  
Interesante Italico79 , No estaba tan actualizado, no sabia que en PHP se puede hacer "callback" como hace Javascipt. Tenes idea desde que version de php se puede hacer eso?

Saludos!
  #4 (permalink)  
Antiguo 29/05/2014, 13:55
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Restar a todos los elementos de un arreglo

Cita:
Iniciado por juan_14nob Ver Mensaje
Interesante Italico79 , No estaba tan actualizado, no sabia que en PHP se puede hacer "callback" como hace Javascipt. Tenes idea desde que version de php se puede hacer eso?
array_map() existe desde PHP 4 >= 4.0.6 y funciones anonimas hace tiempo tambien
__________________
Salu2!
  #5 (permalink)  
Antiguo 29/05/2014, 13:59
Avatar de juan_14nob  
Fecha de Ingreso: abril-2010
Mensajes: 552
Antigüedad: 14 años
Puntos: 6
Respuesta: Restar a todos los elementos de un arreglo

array_map si la conocia, lo que no estaba al tanto era de las funciones "anonimas" ¿Cómo puedo conseguir mas información acerca de este método ?

ya que me parece mejor que hacer:

Código PHP:
Ver original
  1. <?php
  2. $valor = metodo("","");
  3. if($valor) {  }
  4.  
  5. ?>

Es posible hacer algo como:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $valor = function($a, callback) {
  4.  
  5. return callback;
  6. }
  7.  
  8. $valor("Example", function(){
  9.  // Algo asi ?
  10. });
  11. ?>


Saludos!
  #6 (permalink)  
Antiguo 29/05/2014, 14:01
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Restar a todos los elementos de un arreglo

Excelente Italico76, tema solucionado :D
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #7 (permalink)  
Antiguo 29/05/2014, 14:23
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Restar a todos los elementos de un arreglo

Aviso: las funciones anónimas solo funcionan desde PHP5.3

http://www.php.net/manual/es/functions.anonymous.php
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #8 (permalink)  
Antiguo 29/05/2014, 14:34
Avatar de juan_14nob  
Fecha de Ingreso: abril-2010
Mensajes: 552
Antigüedad: 14 años
Puntos: 6
Respuesta: Restar a todos los elementos de un arreglo

Cita:
Iniciado por stramin Ver Mensaje
Aviso: las funciones anónimas solo funcionan desde PHP5.3

http://www.php.net/manual/es/functions.anonymous.php
Yeaaaaaaaah !

Esto es lo que se viene de PHP 6 ?
  #9 (permalink)  
Antiguo 29/05/2014, 14:46
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Restar a todos los elementos de un arreglo

No, para php6 estas son las propuestas: https://wiki.php.net/ideas/php6
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #10 (permalink)  
Antiguo 29/05/2014, 15:26
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Restar a todos los elementos de un arreglo

Cierto, los callbacks no se pueden "almacenar" para tratar como a uno se le de la gana.


En otros lenguajes como Javascript o Python se pueden guardar pero en PHP no existe el tipo puntero y entre los tipos disponibles no existe "callback"
__________________
Salu2!
  #11 (permalink)  
Antiguo 29/05/2014, 15:33
lolainas
Invitado
 
Mensajes: n/a
Puntos:
existe el tipo callable o Closure
  #12 (permalink)  
Antiguo 29/05/2014, 15:41
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Restar a todos los elementos de un arreglo

Cita:
Iniciado por lolainas Ver Mensaje
existe el tipo callable o Closure
Lo soñaste

Cita:
"boolean"
"integer"
"double" (for historical reasons "double" is returned in case of a float, and not simply "float")
"string"
"array"
"object"
"resource"
"NULL"
"unknown type"
Solo esos (y sus derivados) amigo mio:

http://www.php.net/manual/en/function.gettype.php
__________________
Salu2!
  #13 (permalink)  
Antiguo 29/05/2014, 15:42
lolainas
Invitado
 
Mensajes: n/a
Puntos:
http://www.php.net/manual/es/language.types.callable.php

pruebalo tu mismo:

function(callable $var){}
  #14 (permalink)  
Antiguo 29/05/2014, 16:06
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Restar a todos los elementos de un arreglo

El closure lo vi hace un rato, está desde php 5.3

http://www.php.net/manual/es/class.closure.php
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #15 (permalink)  
Antiguo 29/05/2014, 16:13
Avatar de juan_14nob  
Fecha de Ingreso: abril-2010
Mensajes: 552
Antigüedad: 14 años
Puntos: 6
Respuesta: Restar a todos los elementos de un arreglo

jojo, se armo la batalla nerd (sin ofender)

Pero si, lolainas tiene razón, acabo de verificarlo.
Supongo que tendré que actualizarme un poco mas en Php, porque ha avanzado bastante.
  #16 (permalink)  
Antiguo 29/05/2014, 16:36
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Restar a todos los elementos de un arreglo

Lo dicho....... me equivoqué!!!

Código PHP:
Ver original
  1. <?php
  2.  
  3. $callable = function ($arg){ return $arg.' bar'; };
  4.  
  5. var_dump($callable('foo'));

No la tenia muy clara, hice una prueba.. se me olvido un (;) ...error de parseo del interprete y pense que no se podia ;-P
__________________
Salu2!
  #17 (permalink)  
Antiguo 29/05/2014, 16:39
lolainas
Invitado
 
Mensajes: n/a
Puntos:
de hecho sigues sin usarlo correctamente q llames a una variable $callable no significa q estes usando el tipo callable, deberias leer el manual y sobre todo antes de postear.
  #18 (permalink)  
Antiguo 29/05/2014, 17:03
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Restar a todos los elementos de un arreglo

Cita:
Iniciado por lolainas Ver Mensaje
de hecho sigues sin usarlo correctamente q llames a una variable $callable no significa q estes usando el tipo callable, deberias leer el manual y sobre todo antes de postear.
Bueno amigo...

He intentado extraer informacion de un "tipo callable" un tipo derivado de object (una clase)

Mas alla de sus insultos.... voy a postear lo que he investigado:

Código PHP:
<?php

$callable 
= function ($arg){ return $arg.' bar'; };

var_dump($callable);
var_dump(gettype($callable));
var_dump($callable('foo'));
var_dump($callable->parameter);
Resultado:

Cita:
object(Closure)#1 (1) {
["parameter"]=>
array(1) {
["$arg"]=>
string(10) "<required>"
}
}
string(6) "object"
string(7) "foo bar"

PHP Catchable fatal error: Closure object cannot have properties in C:\WWW\apac
he2\htdocs\pruebas\test2.php on line 9

Catchable fatal error: Closure object cannot have properties in C:\WWW\apache2\h
tdocs\pruebas\test2.php on line 9
Pareciera ser que hay una propiedad privada llamada "parameter" y por eso mismo no se puede extraer los datos como tal y no creo ReflectionClass ayude tampoco.

Y no veo porque enfatiza en que esta mal lo he escrito, donde esta el supuesto error ?
__________________
Salu2!

Última edición por Italico76; 29/05/2014 a las 17:36
  #19 (permalink)  
Antiguo 30/05/2014, 00:13
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Insultar??? y tu quieres ser colaborador? deberías hacertelo mirar.

Esta es la diferencia de la q te hablaba, ya que a pesar de todo sigues sin usar callable, solo has usado Closure, ya que no es lo mismo '$callable' CON DOLAR (q es el nombre de variable que tu has elegido) q 'callable' SIN DOLAR, el tipo de datos.

Volviendo al tema de tus complejos, de verdad, nadie te ha insultado, te tomas todo muy a pecho, llevo años desarrollando no sólo en php, y sigo revisando los manuales y documentaciones cada vez q toco un lenguaje.

Saludos, q seas feliz.
  #20 (permalink)  
Antiguo 30/05/2014, 07:45
Avatar de juan_14nob  
Fecha de Ingreso: abril-2010
Mensajes: 552
Antigüedad: 14 años
Puntos: 6
Respuesta: Restar a todos los elementos de un arreglo

Cita:
Iniciado por lolainas Ver Mensaje
Insultar??? y tu quieres ser colaborador? deberías hacertelo mirar.

Esta es la diferencia de la q te hablaba, ya que a pesar de todo sigues sin usar callable, solo has usado Closure, ya que no es lo mismo '$callable' CON DOLAR (q es el nombre de variable que tu has elegido) q 'callable' SIN DOLAR, el tipo de datos.

Volviendo al tema de tus complejos, de verdad, nadie te ha insultado, te tomas todo muy a pecho, llevo años desarrollando no sólo en php, y sigo revisando los manuales y documentaciones cada vez q toco un lenguaje.

Saludos, q seas feliz.

Lolainas, sácate la gorra de la superación petulante , sabes cuantos años de manuales te faltan todavía ... nadie es mejor que nadie acá... Si fueras tan inteligente (por como hablas) ¿Que haces en un foro?
  #21 (permalink)  
Antiguo 30/05/2014, 09:46
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Restar a todos los elementos de un arreglo

Veo que el tema se ha alargado, he estado tratando de averiguar bien como funciona esto ya que en este momento estoy utilizándolo mucho y por lo que veo podrá serme muy útil en el futuro, no tanto por hacer funciones anónimas, si no para hacer clases que afecten a todo mi array en base a alguna que otra variable almacenada en la clase.

el elemento "callable" por lo que entiendo, son funciones que pueden ser "llamables" por alguna función call_user_func().

---------------

Llamar a una función de esta forma

function mi_funcion($v1,$v2){
return 1;
}

vendría a ser lo mismo que

call_user_func("mi_funcion",1,'a');

---------------

también para una clase de esta forma

class mi_clase {
public function mi_funcion($v1,$v2) {
return 1;
}
}

puede llamarse así

call_user_func(array("mi_clase","mi_funcion"),1,'a ');

---------------

Leyendo la definición de esta función me ha quedado bastante claro :)

http://www.php.net/manual/es/functio...-user-func.php

para saber si una función es llamable se puede usar is_callable()

http://www.php.net/manual/es/function.is-callable.php

Espero les sirva tanto como a mi :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: arreglo, elementos, restar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:59.