Php 将子数组中的位置作为字符串传递

Php 将子数组中的位置作为字符串传递,php,arrays,syntax,Php,Arrays,Syntax,我有一个函数,它在多维数组中搜索一个键,并返回路径 在数组中,将所需的键作为字符串发送给我 有没有什么方法可以在php中使用这个字符串到达原始数组中的这个位置,而不是获取值,而是对数组的这个特定branch进行更改 例如: $array = array('first_level'=>array( 'second_level'=>array( 'desired_key'=>'value'))

我有一个函数,它在多维数组中搜索一个键,并返回路径 在数组中,将所需的键作为字符串发送给我

有没有什么方法可以在php中使用这个字符串到达原始数组中的这个位置,而不是获取值,而是对数组的这个特定branch进行更改

例如:

$array = array('first_level'=>array(
                   'second_level'=>array(
                          'desired_key'=>'value')));
在本例中,函数将返回字符串:

'第一级=>第二级=>所需的密钥'

是否有方法使用此输出,或采用不同的格式,以便按以下方式或类似方式使用

$res = find_deep_key($array,'needle');
$array[$res]['newkey'] = 'injected value';

谢谢

只需编写一个函数来获取字符串和数组。函数将获取每个数组级别的键,然后返回找到的对象

例如:

void object FindArray(Array[] array,String key)
{
if(key.Length == 0) return array;

var currentKey = key.Split('=>')[0];
return FindArray(array[currentKey], key.Remove(currentKey));
}

我想你想在数组中递归搜索你的密钥?如果我错了,请纠正我

试试这个

function recursive_array_search($needle,$haystack) {
   foreach($haystack as $key=>$value) {
      $current_key=$key;
      if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
        return $current_key;
      }
   }
return false;
}
从此处开始

如果钥匙路径是安全的(例如,用户未给出),您可以使用
eval
执行以下操作:

$k = 'first_level=>second_level=>desired_key';
$k = explode('=>', $k);
$keys = '[\'' . implode('\'][\'', $k) . '\']';

eval('$key = &$array' . $keys . ';');

var_dump($key);
find_key_in_array($key, $array, function($foundValue){

  // do stuff here with found value, e.g.
  return $foundValue * 2;

});
function find_key_in_array($key, $array, $callback){

  // iterate over array fields recursively till you find desired field, then:
  ...
  $array[$key] = $callback($array[$key]);

}

你需要像这样的东西:

$k = 'first_level=>second_level=>desired_key';
$k = explode('=>', $k);
$keys = '[\'' . implode('\'][\'', $k) . '\']';

eval('$key = &$array' . $keys . ';');

var_dump($key);
find_key_in_array($key, $array, function($foundValue){

  // do stuff here with found value, e.g.
  return $foundValue * 2;

});
function find_key_in_array($key, $array, $callback){

  // iterate over array fields recursively till you find desired field, then:
  ...
  $array[$key] = $callback($array[$key]);

}
而实施过程将类似于:

$k = 'first_level=>second_level=>desired_key';
$k = explode('=>', $k);
$keys = '[\'' . implode('\'][\'', $k) . '\']';

eval('$key = &$array' . $keys . ';');

var_dump($key);
find_key_in_array($key, $array, function($foundValue){

  // do stuff here with found value, e.g.
  return $foundValue * 2;

});
function find_key_in_array($key, $array, $callback){

  // iterate over array fields recursively till you find desired field, then:
  ...
  $array[$key] = $callback($array[$key]);

}

如果您需要将一些新的子数组追加到多维复杂数组中,并且您知道应该将其追加到何处(您将路径作为字符串),这可能会起作用(另一种没有
eval()
)的方法):


当然,只有当路径中的所有键都已存在时,它才会起作用。否则它会将新的子数组附加到错误的位置。

我已经读了两遍,但没有成功地理解您的问题。因此,您希望在该示例数组中搜索
“所需的\u键”
,然后返回,
第一级=>第二级=>所需的\u键
?然后你想让另一个函数使用这个字符串版本来获取这个键的值?为什么两个进程的第一个函数可以直接返回值?这一切的真正意义是什么?感谢smokey和Brewal,我编辑了问题的最后一行。我不是在追求里面的值,我是在尝试在一个特定的位置改变数组。那么你的代码的预期输出是什么?你在哪里看到java的问题?LMAO。这使我的一天一旦我得到这个关键,我如何访问子阵列,以便作出改变?这是假设所需的关键是更深一层。pNre,感谢您通过我的困难措辞和理解我的意思。