cari

Rumah  >  Soal Jawab  >  teks badan

Masalah laluan dinamik elemen tatasusunan dalam php

Jika saya tahu laluan elemen dalam tatasusunan, bagaimanakah saya boleh mendapatkan nilai elemen ini?
Kod berikut melaporkan ralat, bagaimana untuk menyelesaikannya? Adakah sesiapa mempunyai idea yang baik?

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

$x = 'a.b.c';
$y = str_replace('.','\'][\'',$x);
$y = 'm[\''.$y.'\']';

echo $$y; 

Ralat akan dilaporkan:

Notis: Pembolehubah tidak ditentukan: m['a']['b']['c'] dalam /web/root/index.php pada baris 9
世界只因有你世界只因有你2791 hari yang lalu517

membalas semua(6)saya akan balas

  • 曾经蜡笔没有小新

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

    Nama pembolehubah dinamik hanya sah untuk pembolehubah, bukan elemen tatasusunan 'm["a"]["b"]["c"]'Walaupun $ ditambahkan di hadapan, keseluruhan rentetan akan dianggap sebagai pembolehubah, dan secara semula jadi ia tidak boleh ditemui.

    Anda boleh menggunakan gelung

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

    balas
    0
  • 我想大声告诉你

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

    ?Pertama sekali, pembolehubah $y selepas gema yang anda cetak mempunyai satu lagi $符号,其次如果你想获取@@@@@,直接$m['a']['b']['c']

    balas
    0
  • 迷茫

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

    Sebenarnya, apa yang anda tulis adalah betul, jangan tergesa-gesa untuk bertanya, lihat sahaja kod anda

    balas
    0
  • 巴扎黑

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

    Secara peribadi, saya berpendapat bahawa apabila menghadapi masalah seperti ini, kita harus mempertimbangkan untuk menggunakan rekursi untuk menanganinya dan bukannya menggunakan penggantian rentetan.

    <?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));

    balas
    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);

    balas
    0
  • 滿天的星座

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

    Jika anda menggunakan rangka kerja laravel,

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

    balas
    0
  • Batalbalas