una matriz matrices imprimir dinamica dibujar declarar crear como 5x5 3x3 2x2 php array-merge

matrices - matriz 5x5 php



PHP-Cómo combinar matrices dentro de la matriz (4)

Como fusionar n numero de array en php. Me refiero a cómo puedo hacer el trabajo como:
array_merge(from : $result[0], to : $result[count($result)-1])
O
array_merge_recursive(from: $result[0], to : $result[count($result) -1])


Donde $result es una matriz con múltiples matrices dentro de esta forma:

$result = Array( 0 => array(),//associative array 1 => array(),//associative array 2 => array(),//associative array 3 => array()//associative array )

Mi resultado es:

$result = Array( 0 => Array( "name" => "Name", "events" => 1, "types" => 2 ), 1 => Array( "name" => "Name", "events" => 1, "types" => 3 ), 2 => Array( "name" => "Name", "events" => 1, "types" => 4 ), 3 => Array( "name" => "Name", "events" => 2, "types" => 2 ), 4 => Array( "name" => "Name", "events" => 3, "types" => 2 ) )

Y lo que necesito es

$result = Array( "name" => "name", "events" => array(1,2,3), "types" => array(2,3,4) )


Prueba esto

$result = array_merge($array1, $array2);

O, en lugar de array_merge, puede usar la op + que realiza una unión:

$array2 + array_fill_keys($array1, '''');


Realmente me gustó la respuesta de complex857 pero no me funcionó, porque tenía teclas numéricas en mis arreglos que necesitaba preservar.

Utilicé el operador + para conservar las claves (como se sugiere en PHP array_merge con claves numéricas ) y utilicé array_reduce para fusionar la matriz.

Por lo tanto, si desea combinar matrices dentro de una matriz a la vez que conserva las claves numéricas, puede hacerlo de la siguiente manera:

<?php $a = [ [0 => ''Test 1''], [0 => ''Test 2'', 2 => ''foo''], [1 => ''Bar''], ]; print_r(array_reduce($a, function ($carry, $item) { return $carry + $item; }, [])); ?>

Resultado:

Array ( [0] => Test 1 [2] => foo [1] => Bar )


Si a ti te gustaría:

  • comprueba que cada parámetro que entra en array_merge es en realidad una matriz
  • Especifique una propiedad particular dentro de una de las matrices para fusionar

Puede utilizar esta función:

function mergeArrayofArrays($array, $property = null) { return array_reduce( (array) $array, // make sure this is an array too, or array_reduce is mad. function($carry, $item) use ($property) { $mergeOnProperty = (!$property) ? $item : (is_array($item) ? $item[$property] : $item->$property); return is_array($mergeOnProperty) ? array_merge($carry, $mergeOnProperty) : $carry; }, array()); // start the carry with empty array }

Vamos a verlo en acción ... aquí hay algunos datos:

Estructura simple: matriz pura de matrices para fusionar.

$peopleByTypesSimple = [ ''teachers'' => [ 0 => (object) [''name'' => ''Ms. Jo'', ''hair_color'' => ''brown''], 1 => (object) [''name'' => ''Mr. Bob'', ''hair_color'' => ''red''], ], ''students'' => [ 0 => (object) [''name'' => ''Joey'', ''hair_color'' => ''blonde''], 1 => (object) [''name'' => ''Anna'', ''hair_color'' => ''Strawberry Blonde''], ], ''parents'' => [ 0 => (object) [''name'' => ''Mr. Howard'', ''hair_color'' => ''black''], 1 => (object) [''name'' => ''Ms. Wendle'', ''hair_color'' => ''Auburn''], ], ];

Menos simple: Array de matrices, pero quisiera especificar las personas e ignorar el conteo .

$peopleByTypes = [ ''teachers'' => [ ''count'' => 2, ''people'' => [ 0 => (object) [''name'' => ''Ms. Jo'', ''hair_color'' => ''brown''], 1 => (object) [''name'' => ''Mr. Bob'', ''hair_color'' => ''red''], ] ], ''students'' => [ ''count'' => 2, ''people'' => [ 0 => (object) [''name'' => ''Joey'', ''hair_color'' => ''blonde''], 1 => (object) [''name'' => ''Anna'', ''hair_color'' => ''Strawberry Blonde''], ] ], ''parents'' => [ ''count'' => 2, ''people'' => [ 0 => (object) [''name'' => ''Mr. Howard'', ''hair_color'' => ''black''], 1 => (object) [''name'' => ''Ms. Wendle'', ''hair_color'' => ''Auburn''], ] ], ];

Ejecutarlo

$peopleSimple = mergeArrayofArrays($peopleByTypesSimple); $people = mergeArrayofArrays($peopleByTypes, ''people'');

Resultados - Ambos devuelven esto:

Array ( [0] => stdClass Object ( [name] => Ms. Jo [hair_color] => brown ) [1] => stdClass Object ( [name] => Mr. Bob [hair_color] => red ) [2] => stdClass Object ( [name] => Joey [hair_color] => blonde ) [3] => stdClass Object ( [name] => Anna [hair_color] => Strawberry Blonde ) [4] => stdClass Object ( [name] => Mr. Howard [hair_color] => black ) [5] => stdClass Object ( [name] => Ms. Wendle [hair_color] => Auburn ) )

Diversión adicional : si desea seleccionar una propiedad en una matriz u objeto, como "nombre" de una matriz de objetos de personas (o matrices asociadas), puede usar esta función

function getSinglePropFromCollection($propName, $collection, $getter = true) { return (empty($collection)) ? [] : array_map(function($item) use ($propName) { return is_array($item) ? $item[$propName] : ($getter) ? $item->{''get'' . ucwords($propName)}() : $item->{$propName} }, $collection); }

El captador es para objetos posiblemente protegidos / privados.

$namesOnly = getSinglePropFromCollection(''name'', $peopleResults, false);

devoluciones

Array ( [0] => Ms. Jo [1] => Mr. Bob [2] => Joey [3] => Anna [4] => Mr. Howard [5] => Ms. Wendle )


array_merge puede tomar un número variable de argumentos, por lo que con un pequeño truco call_user_func_array puede pasarle la matriz $result :

$merged = call_user_func_array(''array_merge'', $result);

Esto básicamente se ejecuta como si hubieras escrito:

$merged = array_merge($result[0], $result[1], .... $result[n]);

Actualizar:

Ahora, con 5.6, tenemos el operador ... para descomprimir arrays a argumentos, para que pueda:

$merged = array_merge(...$result);

Y tienen los mismos resultados. *

* Los mismos resultados siempre que tenga claves enteras en la matriz desempaquetada, de lo contrario obtendrá un E_RECOVERABLE_ERROR : type 4096 -- Cannot unpack array with string keys error de las E_RECOVERABLE_ERROR : type 4096 -- Cannot unpack array with string keys .