suma - PHP: mueve el elemento de matriz asociativa al principio de la matriz
propiedades de la multiplicacion de matrices (7)
¿Cuál sería el mejor método para mover cualquier elemento de una matriz asociativa al comienzo de la matriz?
Por ejemplo, supongamos que tengo la siguiente matriz:
$myArray = array(
''two'' => ''Blah Blah Blah 2'',
''three'' => ''Blah Blah Blah 3'',
''one'' => ''Blah Blah Blah 1'',
''four'' => ''Blah Blah Blah 4'',
''five'' => ''Blah Blah Blah 5'',
);
Lo que quiero hacer es mover el elemento ''uno'' al principio y terminar con la siguiente matriz:
$myArray = array(
''one'' => ''Blah Blah Blah 1'',
''two'' => ''Blah Blah Blah 2'',
''three'' => ''Blah Blah Blah 3'',
''four'' => ''Blah Blah Blah 4'',
''five'' => ''Blah Blah Blah 5'',
);
Aquí hay otro sencillo delineador que lo hace usando array_splice()
:
$myArray = array_splice($myArray,array_search(''one'',array_keys($myArray)),1) + $myArray;
Esto funciona:
$myArray = array(''one'' => $myArray[''one'']) + $myArray;
Hay una función en los comentarios del manual de PHP para array_unshift que se puede usar para agregar un elemento, con clave, al comienzo de una matriz:
function array_unshift_assoc(&$arr, $key, $val)
{
$arr = array_reverse($arr, true);
$arr[$key] = $val;
return array_reverse($arr, true);
}
Desarme el elemento y vuelva a insertarlo con la función anterior:
$tmp = $myArray[''one''];
unset($myArray[''one'']);
$myArray = array_unshift_assoc($myArray, ''one'', $tmp);
Un enfoque más general puede ser usar uksort para ordenar su matriz por claves y proporcionar una función de clasificación propia.
Prefiero array-merge con la solución de @ Mark.
$myArray = array_merge( [''one'' => $myArray[''one'']], $myArray);
Si tiene claves numéricas de matriz y quiere reindexar claves de matriz, sería mejor ponerlo en array_merge
esta manera:
$myArray = array_merge(array($key => $value) + $myArray );
Un poco tarde, pero en caso de que alguien lo necesite, creé este pequeño fragmento.
function arr_push_pos($key, $value, $pos, $arr)
{
$new_arr = array();
$i = 1;
foreach ($arr as $arr_key => $arr_value)
{
if($i == $pos)
$new_arr[$key] = $value;
$new_arr[$arr_key] = $arr_value;
++$i;
}
return $new_arr;
}
Simplemente ajústelo según sus necesidades, o úselo y desarme el índice para moverlo. Funciona con arreglos asociativos también.
//source array
$myArray = array(
''two'' => ''Blah Blah Blah 2'',
''three'' => ''Blah Blah Blah 3'',
''one'' => ''Blah Blah Blah 1'',
''four'' => ''Blah Blah Blah 4'',
''five'' => ''Blah Blah Blah 5'',
);
// set necessary order
$orderArray = array(
''one'' => '''',
''two'' => '''',
);
//apply it
$result = array_replace($orderArray, $myArray);
print_r($result);