Masalah laluan dinamik elemen tatasusunan dalam php
世界只因有你
世界只因有你 2017-05-16 13:09:31
0
6
513

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
世界只因有你
世界只因有你

membalas semua(6)
曾经蜡笔没有小新

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); 
我想大声告诉你

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

迷茫

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

巴扎黑

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));
伊谢尔伦
$m  = ['a'=>['b'=>['c'=>'@@@@@']]];
$x = 'a.b.c';

echo array_reduce(explode('.', $x), function($s, $i) { return $s[$i]; }, $m);
滿天的星座

Jika anda menggunakan rangka kerja laravel,

$m = [ 'a'=>['b'=>['c'=>'@@@@@' ]]];
$x = 'a.b.c';
$z = array_get($m,$x);
return $z;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan