recherche

Maison  >  Questions et réponses  >  le corps du texte

Problème de chemin dynamique d'un élément d'un tableau en php

Si je connais le chemin d'un élément dans le tableau, comment puis-je obtenir la valeur de cet élément ?
Le code suivant signale une erreur, comment la résoudre ? Quelqu'un a-t-il de bonnes idées ?

$m = ['a'=>['b'=>['c'=>'@@@@@']]];

$x = 'abc';
$y = str_replace('.','\'][\'',$x);
$y = 'm[\''.$y.'\']';

écho $$y; 

Une erreur sera signalée :

Avis : Variable non définie : m['a']['b']['c'] dans /web/root/index.php à la ligne 9
世界只因有你世界只因有你2829 Il y a quelques jours533

répondre à tous(6)je répondrai

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:11:31

    Les noms de variables dynamiques ne sont valables que pour les variables, pas pour les éléments du tableau. 'm["a"]["b"]["c"]'Même si $ est ajouté devant, la chaîne entière sera considérée comme une variable et, naturellement, elle ne sera pas trouvée.

    Vous pouvez simplement utiliser une boucle

    $m  = ['a'=>['b'=>['c'=>'@@@@@']]];
    
    $x = 'a.b.c';
    $y = explode('.',$x);
    $z = $m;
    foreach ($y as $key => $value) {
        $z = $z[$value];
    }
    
    var_dump($z); 

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 13:11:31

    ?Tout d'abord, la variable $y après l'écho que vous avez imprimé en a un de plus $符号,其次如果你想获取@@@@@,直接$m['a']['b']['c']

    répondre
    0
  • 迷茫

    迷茫2017-05-16 13:11:31

    En fait, ce que vous avez écrit est correct, ne vous précipitez pas pour demander, jetez simplement un œil à votre code

    répondre
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:11:31

    Personnellement, je pense que face à ce genre de problème, nous devrions envisager d'utiliser la récursivité pour le résoudre au lieu d'utiliser le remplacement de chaîne.

    <?php
    
    $data = [
        'a'=>[
            'b'=>[
                'c'=>'@@@@@'
                ]
            ]
        ];
    
    $path = 'a.b.c';
    
    $arr = explode('.',$path);
    
    function test($arr, $data){
        if(array_key_exists($arr[0],$data)){
            if(count($arr) > 1){
                $key = array_shift($arr);
                return test($arr, $data[$key]);
            }else{
                return $data[$arr[0]];
            }
        }else{
            return null;
        }
    }
    
    var_dump(test($arr,$data));

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:11:31

    $m  = ['a'=>['b'=>['c'=>'@@@@@']]];
    $x = 'a.b.c';
    
    echo array_reduce(explode('.', $x), function($s, $i) { return $s[$i]; }, $m);

    répondre
    0
  • 滿天的星座

    滿天的星座2017-05-16 13:11:31

    Si vous utilisez le framework Laravel,

    $m = [ 'a'=>['b'=>['c'=>'@@@@@' ]]];
    $x = 'a.b.c';
    $z = array_get($m,$x);
    return $z;

    répondre
    0
  • Annulerrépondre