Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Funcion para array()

Estas en el tema de Funcion para array() en el foro de PHP en Foros del Web. Hola, quisiera saber que funcion puedo utilizar para extraer cada valor de un array y pasarlo a array('en, es, zh'). Este es el array: array(3) ...
  #1 (permalink)  
Antiguo 29/04/2016, 10:39
Avatar de eccorposse  
Fecha de Ingreso: diciembre-2009
Ubicación: Beijing
Mensajes: 69
Antigüedad: 14 años, 4 meses
Puntos: 0
Funcion para array()

Hola, quisiera saber que funcion puedo utilizar para extraer cada valor de un array y pasarlo a array('en, es, zh').

Este es el array:
array(3) { [0]=> array(1) { ["code_country"]=> string(5) "en-US" } [1]=> array(1) { ["code_country"]=> string(5) "es-ES" } [2]=> array(1) { ["code_country"]=> string(5) "zh-CN" } }

Codigo que utilizo:
$prefix = '';
foreach ($availables as $v)
{
$h .= $prefix . $v;
$prefix = ', ';
}

Resultado:
string(19) "Array, Array, Array"
Pero me esta dando Notice: Array to string conversion, por lo que, que funcion puedo utilizar antes de foreach en este caso y asi poderlo convertir a array('en, es, zh'). Gracias de antemano.

Última edición por eccorposse; 29/04/2016 a las 10:48
  #2 (permalink)  
Antiguo 29/04/2016, 11:21
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Funcion para array()

Código PHP:
Ver original
  1. $a=array(array("code_country"=>"en-US"),array("code_country"=>"es-ES"),array("code_country"=>"zh-CN"));
  2.  
  3.  
  4. $output=implode(",",array_map(function($i){ return explode("-",$i["code_country"])[0];},$a));

Tienes un array de arrays.Tu bucle itera sobre el array externo ($availables), y cada $v es un array.
Estas simplemente concatenando $v (un array) a la cadena.
Y, aunque fuera la cadena, lo que contiene es "en-US","es-ES" y "zh-CN".En qué parte de tu código estás intentando procesar esos valores, para quedarte sólo con lo que hay a la izquierda de "-"??
  #3 (permalink)  
Antiguo 29/04/2016, 12:02
Avatar de eccorposse  
Fecha de Ingreso: diciembre-2009
Ubicación: Beijing
Mensajes: 69
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Funcion para array()

Muchas Gracias. Primeramente tomo las array de la BD, a travez de una libreria:

$accepted = SLanguage::parseLanguageList($_SERVER['HTTP_ACCEPT_LANGUAGE']);

$availables = $db->queryAllRows('SELECT code_country FROM ' . $settings->dbprefix . 'languages');

No me di cuenta que estaba con mas arrays dentro de una. Esa parte no la habia hecho, primeramente queria ver que todos los valores estaban en su lugar, separados. Aun no habia entrado en ese aspecto.
  #4 (permalink)  
Antiguo 29/04/2016, 13:34
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Funcion para array()

Por lo que entiendo solo quiere el arreglo con el los lenguajes:
Código PHP:
Ver original
  1. $array = [
  2.     ['code_country' => 'en_US'],
  3.     ['code_country' => 'es_ES'],
  4.     ['code_country' => 'zh_CN'],
  5. ];
  6.  
  7. $preferred_languages = array_map(function ($array_value) {
  8.     return array_shift(
  9.         explode('_', $array_value['code_country'])
  10.     );
  11. }, $array);
  12.  
  13. print_r($preferred_languages); //imptime Array ( [0] => en [1] => es [2] => zh )
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 30/04/2016, 03:51
Avatar de eccorposse  
Fecha de Ingreso: diciembre-2009
Ubicación: Beijing
Mensajes: 69
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Funcion para array()

Cita:
Iniciado por dashtrash Ver Mensaje
Código PHP:
Ver original
  1. $a=array(array("code_country"=>"en-US"),array("code_country"=>"es-ES"),array("code_country"=>"zh-CN"));
  2.  
  3.  
  4. $output=implode(",",array_map(function($i){ return explode("-",$i["code_country"])[0];},$a));

Tienes un array de arrays.Tu bucle itera sobre el array externo ($availables), y cada $v es un array.
Estas simplemente concatenando $v (un array) a la cadena.
Y, aunque fuera la cadena, lo que contiene es "en-US","es-ES" y "zh-CN".En qué parte de tu código estás intentando procesar esos valores, para quedarte sólo con lo que hay a la izquierda de "-"??
return explode("-",$i["code_country"])[0];

Aqui DW me marca como un error de sintaxis donde se encuentra [0], aunque no me muestra ningun problema en el navegador, seria que DW CS6 esta un poco viejito para eso? Quisiera darle un minimo giro al asunto, necesito los valores como estan, para poder seleccionar pais del lenguaje.

Última edición por eccorposse; 30/04/2016 a las 04:10
  #6 (permalink)  
Antiguo 30/04/2016, 04:22
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Funcion para array()

Código PHP:
Ver original
  1. // huele a error de sintaxis
  2. return explode("-",$i["code_country"])[0];

Yo haría algo más legible, por lo menos para mi:
Código PHP:
Ver original
  1. foreach ( $availables as $v ) {
  2. $array_code_country[ ]  = $v['code_country'];
  3. }
  4. $cadena_code_country=implode  (",",$array_code_country);
  5.  
  6. echo $cadena_code_country;
  7. //  en-US,es-ES,zh-CN



Sí lo quieres así en, es, zh puedes añadir un explode

Código PHP:
Ver original
  1. foreach ( $availables as $v ) {
  2. $corte_code_country=explode ( "-",$v['code_country']);
  3. $array_code_country[ ]  = $corte_code_country[0];
  4. }
  5. $cadena_code_country=implode  (",",$array_code_country);
  6.  
  7. echo $cadena_code_country;
  8. //  en,es,zh
__________________
Unset($vida['malRollo']);

Última edición por xerifandtomas; 30/04/2016 a las 04:42
  #7 (permalink)  
Antiguo 30/04/2016, 07:00
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Funcion para array()

Cita:
Iniciado por eccorposse Ver Mensaje
return explode("-",$i["code_country"])[0];
Si te da un error, es por la versión de php.No permite referenciar directamente el valor devuelto por el array.En ese caso, hay que primero asignar el varlor retornado, y luego indexar:
Código PHP:
Ver original
  1. $a=explode("-",$i["code_country"]); return $a[0];
Aunque es incluso más simple, ya que el código siempre tiene 2 letras:
Código PHP:
Ver original
  1. return substr($i["code_country"],2);
Quedando:
Código PHP:
Ver original
  1. $output=implode(",",array_map(function($i){ return substr($i["code_country"],2);},$a));


Nota: que tenga poca legibilidad está hecho a propósito.Aunque es habitual encontrar este tipo de codificación funcional en js...No es tan extraño.

Última edición por dashtrash; 30/04/2016 a las 07:05
  #8 (permalink)  
Antiguo 03/05/2016, 01:57
Avatar de eccorposse  
Fecha de Ingreso: diciembre-2009
Ubicación: Beijing
Mensajes: 69
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Funcion para array()

Gracias a todos por su aporte y tiempo, ya estan trabajando todas las funciones, con algunos cambios pero quedo excelente, no puedo pedir mas. Un saludo @hhs, por tu ayuda siempre, recuerdo tus aportes en encripcion AES, saludos, y bueno que tengan un buen dia todos y mil gracias.

Etiquetas: funcion
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 14:34.