ccc

Mostrando entradas con la etiqueta Arrays asociativos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Arrays asociativos. Mostrar todas las entradas

Ordenar un array asociativo por cualquiera de los campos

function orderByLSG($items, $attr, $order) {
    $sortedItems = [];
    foreach ($items as $item) {
        $key = is_object($item) ? $item->{$attr} : $item[$attr];
        $sortedItems[$key] = $item;
    }
    if ($order === 'desc') {
        krsort($sortedItems);
    } else {
        ksort($sortedItems);
    }

    return array_values($sortedItems);
}

$arr = array();
$arrAux = ["id"=>1, "nombre"=>"James Stewart", "pelicula" =>"Historias de Philadelphia"];
$arr[] = $arrAux;
$arrAux = ["id"=>2, "nombre"=>"Gary Cooper", "pelicula" =>"El sargento York"];
$arr[] = $arrAux;
$arrAux = ["id"=>3, "nombre"=>"James Cagney", "pelicula" =>"Yanqui Dandy"];
$arr[] = $arrAux;
$arrAux = ["id"=>4, "nombre"=>"Paul Lukas", "pelicula" =>"Alarma en el Rhin"];
$arr[] = $arrAux;

print_r(orderByLSG($arr, "nombre", "asc"));
print_r(orderByLSG($arr, "pelicula", "asc"));

El método anterior funciona siempre que el índice no sea negativo, para esos casos es mejor ordenar así:
function compararCampo($a, $b) {
  if ($a["campoAComparar"] == $b["campoAComparar"]) {
     return 0;
  }
   return ($a["campoAComparar"] < $b["campoAComparar"]) ? -1 : 1
}
...
uasort($arrAux, 'compararCampo');

Obtener la clave y el valor del último elemento de un Array asociativo

function endKey($arr) {
    end($arr);
    return key($arr);
}

$arr = array( "uno" => "Madrid", "dos" => "París", "tres" => "Londres" );
echo end($arr);
echo "<br>";
echo endkey($arr);

Arrays: Ordenar array asociativo por campo concreto

function orderBy($items, $attr, $order) {
    $sortedItems = [];
    foreach ($items as $item) {
        $key = is_object($item) ? $item->{$attr} : $item[$attr];
        $sortedItems[$key] = $item;
    }
    if ($order === 'desc') {
        krsort($sortedItems);
    } else {
        ksort($sortedItems);
    }
    return array_values($sortedItems);
}


$arr = array(
["id" => 1, "nombre" => "Clark Gable", "anno" => "1934"],
["id" => 2, "nombre" => "Victor McLagen", "anno" => "1935"],
["id" => 3, "nombre" => "Paul Muni", "anno" => "1936"],
["id" => 4, "nombre" => "Spencer Tracy", "anno" => "1937"]
);


$newArr = orderBy($arr,'nombre','desc');

print_r($newArr);

Ordenar un array asociativo por un campo en concreto

$aux = array();
foreach ($arrMovim as $key => $row) {
    $aux[$key] = $row['fechaOrdenar'];
}
array_multisort($aux, SORT_ASC, $arrMovim);
Si se quisiera ordenar por más de un campo:
$arrCampo1 = array();
$arrCampo2 = array();
foreach ($granArray as $key => $row) {
    $arrCampo1[$key] = $row['beneficio_total'];
    $arrCampo2[$key] = $row['id_user'];
}
array_multisort($arrCampo1, SORT_DESC, $arrCampo2, SORT_ASC, $granArray);

Arrays asociativos: Crear un array asociativo a partir de los datos de una BD

<?php
function recorrer($array, $arrCombo) {
    foreach ($array as $i=>$valor) {
$output = '';
switch ($array[$i]["tipo"]) {
case "text":
$output .= $array[$i]["caption"];
$output .= '<input class="formu" type="text" id="'.$i.'" name="'.$i.'"><br/>';
break;
case "hidden":
$output .= '<input type="hidden" value="'.$array[$i]["valor"].'" id="'.$i.'" name="'.$i.'">';
break;
case "combo":
$output .= $array[$i]["caption"];
$output .= '<select id="'.$i.'" name="'.$i.'">';

foreach ($arrCombo as $k=>$item) {
if ($k == $i) {
$registro = $item["registro"];
for ($p=0; $p < count($registro); $p++) {
    $output .= '<option value="'.$registro[$p][$item["id"]].'">'.$registro[$p][$item["texto"]].' </option>';
}
break;

}
}
$output .= '</select><br>';
}
echo $output;
} // foreach
}

 $arrReg = array(
"nombre" => array("caption" => "Nombre", "tipo" => "text"),
"provincia" => array("caption" => "Provincia", "tipo" => "combo"),
"formas_pago" => array("caption" => "Formas de pago", "tipo" => "combo"),
"campo_oculto" => array("caption" => "", "tipo" => "hidden", "valor" => "123"),
 );

  $sql_aux = 'select id, nom_provincia from provincias order by nom_provincia';
  $reg_prov = $bd->getRegistro($sql_aux);
  $sql_aux = 'select id, forma_pago from formas_pago';
  $reg_pago = $bd->getRegistro($sql_aux);
   
 $arrCombo = array(
     "provincia" => array("registro" => $reg_prov, "id" => "id", "texto" => "nom_provincia"),
     "formas_pago" => array("registro" => $reg_pago, "id" => "id", "texto" => "forma_pago"),
  );
 
  recorrer($arrReg, $arrCombo);
?>