Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

117
Vistas
Explotar cadena en comas y tuberías para crear dos matrices

Hice la codificación de la siguiente manera y obtuve el resultado incorrecto:

 $asst_vicars_data_arr=explode(',',$asst_vicars_data); $asst_head_type_count=count($asst_vicars_data_arr); $d = explode("|",$data); foreach ($asst_vicars_data_arr as $value) { $arr = explode("|",$value); print_r($arr); }

Aporte:

 $asst_vicars_data_arr=Array ( [0] => PT|1 [1] => O|4 [2] => PT|15,... )

Rendimiento esperado:

 $type=Array([0] => PT, [1] => O,...) $heads=Array([0] => 1, [1] => 4,...)

¿Qué puedo hacer para crear estas dos matrices?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Espero que esto te ayude. Aquí estoy usando explode para romper una cadena y un bucle foreach .

Pruebe este fragmento de código aquí

 <?php ini_set('display_errors', 1); $asst_vicars_data_arr=Array ( 0 => "PT|1", 1 => "O|4", 2 => "PT|15", 3 =>"1|6"); $types=array(); $heads=array(); foreach($asst_vicars_data_arr as $value) { list($types[],$heads[])=explode("|",$value); } print_r($types); print_r($heads);
about 4 years ago · Santiago Trujillo Denunciar

0

Puedes probar esto

 <?php $asst_vicars_data_arr=array ( 0 => 'PT|1' , 1 => 'O|4' , 2 =>'PT|15'); foreach ($asst_vicars_data_arr as $value) { $arr = explode("|",$value); $type [] = $arr[0]; $heads [] = $arr[1]; } print_r($type); print_r($heads); ?>

Violín

about 4 years ago · Santiago Trujillo Denunciar

0

En esencia, esta pregunta es un ejercicio de conversión de cadena a matriz. En lugar de hacer un montón de explode() , investiguemos un par de métodos que harán menos llamadas a funciones iteradas...

Método n. ° 1 : una sola línea usando preg_match() y list()

 preg_match_all('/([^|]+)\|([^,]+),?/',$asst_vicars_data,$m)?list(,$type,$heads)=$m:null; // output: $type=array(0=>'PT', 1=>'O', 2=>'PT') // output: $heads=array(0=>'1', 1=>'4', 2=>'15')

Método #2 : 3 líneas usando preg_split() , array_chunk() y array_column()

 $asst_vicars_data='PT|1,O|4,PT|15'; $a=array_chunk(preg_split('/,|\|/',$asst_vicars_data),2); $type=array_column($a,0); // output: array(0=>'PT', 1=>'O', 2=>'PT') $heads=array_column($a,1); // output: array(0=>'1', 1=>'4', 2=>'15')

Mi primer método utiliza un patrón de expresiones regulares ajustadas para extraer los valores que list() establece fácilmente en variables. La coma inicial de list() significa que al primer subarreglo (las cadenas completas) de $m no se le asignará un nombre de variable.

Mi segundo método usa un patrón de expresiones regulares ajustadas para explotar la cadena en tuberías y comas en el mismo paso. array_chunk() pone los elementos en pares. Finalmente array_column() obtiene los valores "verticales" en la matriz.

Todas las demás respuestas actualmente en esta página usan llamadas de explode() en cada iteración. Este enfoque se vuelve cada vez más ineficiente a medida que crece el tamaño de la entrada. Por esta razón, será más eficiente llevar a cabo toda la explosión/división una vez y avanzar desde allí.

El método #1 es claramente mi método favorito para este caso; Solo quería mostrar el Método #2 como una alternativa que también disecciona la cuerda una sola vez antes de procesar las piezas.


Aquí hay algunos métodos adicionales que se comportan como los bucles foreach en otras respuestas (también sufren la misma ineficiencia porque llaman a explode() en cada iteración):

array_map() se puede usar para escribir una pequeña y agradable frase:

 $asst_vicars_data='PT|1,O|4,PT|15'; array_map(function($a)use(&$type,&$heads){list($type[],$heads[])=explode('|',$a);},explode(',',$asst_vicars_data)); var_export($type); var_export($heads);

La misma historia con array_walk() pero con una línea extra de código:

 $asst_vicars_data='PT|1,O|4,PT|15'; $asst_vicars_data_arr=explode(',',$asst_vicars_data); array_walk($asst_vicars_data_arr,function($a)use(&$type,&$heads){list($type[],$heads[])=explode('|',$a);}); var_export($type); var_export($heads);
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda