web-dev-qa-db-fra.com

Générer un champ reproductible en fonction de l'ordre défini par l'utilisateur

J'ai un champ répétable très basique dans lequel je permets à l'utilisateur de saisir un champ avec une entrée lui permettant de saisir l'ordre d'affichage [1,2,3,4,5]. Mais je me demande comment appliquer une fonction de tri quelconque aux données stockées pour le champ répétable. Un exemple de sortie est le suivant:

stdClass Object
(
    [order] => Array
    (
        [0] => 1
        [1] => 3
        [2] => 2
    )
    [url] => Array
    (
        [0] => /first
        [1] => /third
        [2] => /second
    )
)

Comment pourrais-je faire pour que lorsque le contenu du module est affiché dans le front-end; il serait basé sur l'ordre défini par l'utilisateur [1,2,3] et non tel qu'il est actuellement [1,3,2].

1
sifu

Voici un exemple de fonction pouvant vous donner une liste ordonnée en fonction de votre tableau de commandes.

public function getSortedArray($myObj, $ordering)
{
  // first build an array with keys as your order, values as data (url)
  $myArray = array();
  foreach($myObj->order as $i=>$order)
  {
    $myArray[$order] = $myObj->url[$i];
  }

  // now you can get the data as per the user requested order
  $return = array();
  foreach($ordering as $order)
  { 
    $return[] = $myArray[$order];
  }

  return $return;
}
1
Nagarjun