Bonjour,

Je voudrais cibler une valeur dans un tableau multi-niveau mais je ne parviens pas trouver comment.
Voici mon tableau :

Array
(
    [key] => field_56dc1a96c4941
    [label] => Disponibilité
    [name] => disponibilite
    [_name] => disponibilite
    [type] => checkbox
    [order_no] => 5
    [instructions] => 
    [required] => 0
    [id] => acf-field-disponibilite
    [class] => checkbox
    [conditional_logic] => Array
        (
            [status] => 0
            [rules] => Array
                (
                    [0] => Array
                        (
                            [field] => null
                            [operator] => ==
                        )

                )

            [allorany] => all
        )

    [choices] => Array
        (
            [Séances Individuelles Studio 15] => Séances Individuelles Studio 15
            [Cours ou Séances à Domicile] => Cours ou Séances à Domicile
            [Cours en Entreprise] => Cours en Entreprise
        )

    [default_value] => 
    [layout] => horizontal
    [field_group] => 6847
    [value] => 
)

C'est un print_r du tableau $dispo.
Je voudrais cibler les valeurs du tableau "choices".
Si Je fait ça :

<?php $dispo = get_field_object('disponibilite');   ?>
<?php var_dump($dispo['choices'][0]); ?>

J'obtiens un NULL
Quelqu'un peut-il m'aider ?
Merci !

9 réponses


Salut,

D'où sort la fonction get_field_object() ??

Bonjour,

Tu lui renseignes l'index 0 sauf qu'il n'y a pas d'index 0 dans ton array "choices". Essayes plutot ça par exemple :

<?php var_dump($dispo['choices']['Séances Individuelles Studio 15']); ?>

Edit : Je suis assez d'accord avec Benares, ce genre de clés sous forme d'une chaîne de caractères accentuée ne sont pas les plus judicieuse :s

ou alors si tu remplis ce tableau dans une boucle, tu peu affecter un index 0, 1, 2 a la place de 'Séances Individuelles Studio 15', 'Cours ou Séances à Domicile' et 'Cours en Entreprise'

dans tous les cas mettre la value en clé c'est surement pas très facile a gérer par la suite

hatfab
Auteur

Merci de vos réponses !

@betaWeb : <code>get_field_object()</code> est une fonction de Advanced Custom Fields extension pour Wordpress

@GregWoot : Je pensais que dans un tableau on avait par défaut des index représant la liste des valeurs dans leur orde de stockage, c'est pas le cas ? En fait, ce tableau est rempli par 3 caces à cocher mais je voulais être souple sur le libellé de ces cases, c'est pour ça que je souhaitais plutôt utiliser un numéro d'emplacement, quelque soit la valeur de la string.

@Benares : Il n'y a pas moyen de récupérer la 1e, 2e ou 3e valeur d'un tableau par des numéros d'emplacement sans recréer un tableau par une boucle ?

les numéros (ou index) d'emplacements sont justement les clés =) (par défault quand rien n'est défini)

la tu as mis Séances Individuelles Studio 15 par exemple entre crochets et c'est CA ta clé

pour le moment la seule façon de choper ta valeur c'est de faire

$dispo['choices']['Séances Individuelles Studio 15']

comme GregWoot l'as dit plus haut =)

hatfab
Auteur

@GregWoot : En fait, si je dois mettre la string en entier pour la récupérer dans le tableau, autant la mettre en dur dans mon code, ça revient au même…
Finalement dans le code ça donne ça :

<?php if (in_array("Séances Individuelles Studio 15", $dispo)) : ?> <li><div class="disk1"><i class='ioa-front-icon user-3icon-'></i></div><span><?php echo "Séances Individuelles Studio 15" ?></span></li> <?php endif; ?>

Mais c'est super casse gueule car si le client me demande changer l'intitulé d'une des checkbox plus rien ne marche.

hatfab
Auteur

@Benares : Ok, le problème c'est que Advanced Custom Fields met la valeur de la checkbox comme clé par défaut.

Ouaip très dangereux...

tu pourrais peut etre essayer de te créer un tableau pour aliasser tes clés (idée à la con comme ca)

exemple:

$mon_dummy_array = [
    0 => 'Séances Individuelles Studio 15',
    1 => 'Cours ou Séances à Domicile',
    2 => 'Cours en Entreprise'
];

apres tu peut choper une value comme ca :

    $dispo['choices'][$mon_dummy_array[0]]

Par contre c'est toujours hyper dégueu, mais si ton client veut changer des labels, au moins tu a que le dummy_array a changer =)

hatfab
Auteur

Ouaip, quitte à renter dans le code, je vais laisser comme ça. Je me suis mis un pense-bête dans le champs des Checkbox pour me souvenir de modifier le code en cas de changement d'intitulé.
Merci à toi !