【问题标题】:$$ array variable in PHP [duplicate]PHP中的$$数组变量[重复]
【发布时间】:2015-06-02 23:36:23
【问题描述】:

我可以使用 $$ 变量来引用这样的变量

$var = 'car';
$car = 'Lamborghini';
echo $$var;

上面的代码会回显兰博基尼

但是我有这样的代码:-

$var = "['acct_1']['etc']['anotherInfo']['sing']";
$var = 'arr'.$var;
echo $arr['acct_1']['etc']['anotherInfo']['sing'] ;
echo $$var;

第一个 echo 打印出正确的值,但 $$var 没有给出正确的值。

非常感谢任何帮助。

谢谢

【问题讨论】:

  • 这显然不适用于数组
  • 好的,我将关闭问题,但找不到这样做的选项。
  • 为什么,顺其自然。检查一段时间。
  • 好的,可能有人会建议一些解决方法。
  • 不是数组而是字符串人。

标签: php reference


【解决方案1】:

您始终可以将键保存在数组中,然后对其进行迭代以正确解析值:

$keys = ['acct_1', 'etc', 'anotherInfo', 'sing'];

$val = $arr;
foreach($keys as $key) {
    $val = $val[$key];
}

现在,$arr['acct_1']['etc']['anotherInfo']['sing']$val 具有相同的值。

this demo 试试吧。

编辑:

$indexInfo 中已有 $keys 数组。你应该可以像这样使用它:

function replaceValue($arr, $indexInfo, $char)
{
    // $indexInfo is all you need!
    $var = $arr;
    foreach($indexInfo as $key) {
        $var = $var[$key];
    }
    echo $arr['acct_1']['etc']['anotherInfo']['sing'] . "\n";
    echo $var  . "\n";
    die($var);
}

【讨论】:

  • $arr = array('write' => 100, 'acct_1' => array('blah' => 'foo', 'dance' => 24), 'acct_1' => array ('type' => 'string', 'length' => 5, 'etc' => array('anotherInfo' => array( 'info1' => '', 'sing' => 500000000 ))), ) ;假设我们有这样的数组,现在您想根据一些计算来引用 sing。所以我正在做的是将遍历的值存储在一个数组中,然后生成有问题的字符串。
  • @JatinDhoot - 当您说“将遍历的值存储在数组中”时,您是否形成了与我在回答中称为 $keys 的完全相同的数组?在这种情况下,您应该能够使用该数组来实现我的答案。
  • @JatinDhoot :您说,您正在使键内爆,而是将它们保留在数组形式中并应用他的逻辑,它工作正常。使用您在上述评论中提供的样本进行测试
  • OK 伙计们,让我看看
  • @nickb - 我的是多层嵌套数组,尺寸事先不知道
【解决方案2】:

不幸的是,这行不通,但是为什么不这样做呢

/**
 * Search into a multi dimensional array to find arbitrary data
 * @param array $array The array to search
 * @param string ... Any number of array keys
 * @return mixed
 */
function deepArraySearch(array $array) {
    $keys = func_get_args();
    array_shift($keys); // First element is the array

    // If no more keys to use
    if(!$keys) {
        return $array;
    }

    $nextKey = array_shift($keys);
    $nextData = $array[$nextKey];

    // Nothing left to search
    if(!is_array($nextData )) {
        return $nextData ;
    }

    array_unshift($keys, $nextData);
    return call_user_func_array('deepArraySearch', $keys);
}

$arr = ['one' => ['two' => ['three' => 'data']]];

print_r(deepArraySearch($arr, 'one'));
print_r(deepArraySearch($arr, 'one', 'two'));
print_r(deepArraySearch($arr, 'one', 'two', 'three'));

echo PHP_EOL;

在你的情况下,我想它会像这样工作

$arr = ['acct_1' => ['etc' => ['anotherInfo' => ['sing' => 'song']]]];
print_r(deepArraySearch($arr, 'acct_1', 'etc', 'anotherInfo', 'sing')); // song

最后说明:

如果您使用的是 PHP 5.6、7 或 HHVM,这个函数会更好:

<?php

/**
 * Search into a multi dimensional array to find arbitrary data
 * @param array $array The array to search
 * @param string ... Any number of array keys
 * @return mixed
 */
function deepArraySearch(array $array, ...$keys) {

    // If no more keys to use
    if(!$keys) {
        return $array;
    }

    $nextKey = array_shift($keys);
    $nextData = $array[$nextKey];

    // Nothing left to search
    if(!is_array($nextData )) {
        return $nextData ;
    }

    return deepArraySearch($nextData, ...$keys);
}

演示:http://3v4l.org/vmocO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-22
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多