Comment définir de façon dynamique les clés du tableau en php
J'ai un peu de logique qui est utilisé pour trier les données, mais en fonction de la saisie de l'utilisateur les données sont regroupées différemment. Droit maintenant, j'ai cinq fonctions différentes qui contiennent la même logique mais différents groupements. Est-il un moyen de combiner ces fonctions et de définir de façon dynamique une valeur de groupe correctement. Au sein de la fonction de ces missions sont en train de se
Par exemple, parfois je conserver les calculs simplement par:
$calcs[$meter['UnitType']['name']] = ...
mais d'autres fois besoin d'un plus spécifique de regroupement:
$calcs[$meter['Resource']['name']][$meter['UnitType']['name']][date('Y-m',$start)] =...
Comme vous pouvez le voir parfois, il est stocké dans un multidiminesional tableau et d'autres fois non. J'ai essayé d'utiliser la fonction eval() mais sans succès (pas sûr que ce soit la bonne approche). Stocker les données dans une variable temporaire n'a pas vraiment d'économiser beaucoup car il y a beaucoup de boucles imbriquées et si les déclarations ainsi, le tableau devra être répétée dans de multiples endroits.
MODIFIER
J'espère que l'exemple suivant explique mon problème. C'est évidemment une bêtise version:
if(){
$calcs[$meter['UnitType']['name']] = $data;
} else {
while () {
$calcs[$meter['UnitType']['name']] = $data;
}
}
Maintenant la même logique peut être utilisé, mais pour les stocker dans des tonalités différentes:
if(){
$calcs[$meter['Resource']['name']][$meter['UnitType']['name']][date('Y-m',$start)] = $data;
} else {
while () {
$calcs[$meter['Resource']['name']][$meter['UnitType']['name']][date('Y-m',$start)] = $data;
}
}
Est-il un moyen d'abstraire les touches dans l' $calc tableau[] afin que je puisse avoir une fonction au lieu d'avoir plusieurs fonctions différentes de la matrice de touches?
Je ne pas vraiment comprendre le problème. Essayez-vous de faire des requêtes sur ces structures de données d'une manière uniforme?
J'ai fait un edit pour aider à expliquer. J'espère qu'il ne l'aide.
pouvez-vous donner quelques exemples de données? Êtes-vous littarlly en essayant de déterminer si le nom de la clé est UnitType ou de Ressources, ou ne UnitType et des Ressources effectivement stocker du contenu dynamique dans les clés?
ajouter des espaces réservés pour des valeurs entrées par l'utilisateur. Faire vos tableaux uniforme.
OriginalL'auteur Kramer | 2010-09-13
Vous devez vous connecter pour publier un commentaire.
Ne serait-il pas plus facile de faire ce qui suit
ou vous pouvez utiliser des Objets
mais je voudrais des conseils que vous créez votre structure dans les tableaux et ensuite faire!
ou vous pouvez boucler votre premier tableau dans un nouveau tableau!
Donner il y a et de voir comment la structure du tableau qui vient de sortir.
OriginalL'auteur RobertPitt
Essayez d'utiliser un commutateur de cas.
OriginalL'auteur
Je suis d'accord avec le commentaire sur l'OP par @Jake N que peut-être l'aide d'objets est une meilleure approche. Néanmoins, si vous souhaitez utiliser des tableaux, vous pouvez vérifier l'existence de clés dans un conditionnel, comme suit:
D'autre part, si vous souhaitez utiliser des objets, vous pouvez créer un
MeterReading
type d'objet, puis ajouterMeterReading
instances comme des éléments d'un tableau à votre$calcs
tableau, comme suit:Évidemment, vous pouvez profiter de cette plus loin, comme la vérification de l'existence de la matrice de touches dans le constructeur de l'objet, donnant à la propriété de l'objet
resource
une valeur par défaut si non fourni, et ainsi de suite, mais c'est un début pour une approche OO.OriginalL'auteur e_i_pi
Vous pouvez l'utiliser si vous souhaitez obtenir des&définir des valeurs de tableau dynamique.
Comment cela fonctionne:
Appel
getVal($data,array('foo','bar','2017-08'))
sera de retour l'équivalent de$data['foo']['bar']['2017-08']
.Appel
setVal($data,array('foo','bar','2017-08'),'hello')
sera mis en valeur comme si vous l'avez appelé$data['foo']['bar']['2017-08'] = 'hello'
. inexistante clés seront créés automatiquement par php magie.Cela peut être utile si vous voulez construire la structure de la matrice de façon dynamique.
OriginalL'auteur Manuel Otto
Voici une fonction que j'ai écrit pour le réglage de profondément imbriqués les membres sur les tableaux ou objets:
À l'aide de vos données d'exemple:
Résultats en sortie comme:
Le deuxième argument de
dict_set()
est un$path
chaîne dans dot notation. Vous pouvez construire cette dynamique à l'aide de touches avec la période des séparateurs entre les parties. La fonction travaille avec des tableaux et des objets.Il peut également ajouter des différentiels membres de profondément imbriqués tableau à l'aide de
[]
comme un élément de la$path
. Par exemple:parent.child.child.[]
OriginalL'auteur Jeff Standen
Vous pouvez utiliser cette bibliothèque pour obtenir ou définir la valeur dans le tableau multidimensionnel à l'aide du tableau de touches:
pour obtenir la valeur ou:
pour définir
$data
comme valeur.OriginalL'auteur Minwork