Php 将子数组中的位置作为字符串传递
我有一个函数,它在多维数组中搜索一个键,并返回路径 在数组中,将所需的键作为字符串发送给我 有没有什么方法可以在php中使用这个字符串到达原始数组中的这个位置,而不是获取值,而是对数组的这个特定branch进行更改 例如:Php 将子数组中的位置作为字符串传递,php,arrays,syntax,Php,Arrays,Syntax,我有一个函数,它在多维数组中搜索一个键,并返回路径 在数组中,将所需的键作为字符串发送给我 有没有什么方法可以在php中使用这个字符串到达原始数组中的这个位置,而不是获取值,而是对数组的这个特定branch进行更改 例如: $array = array('first_level'=>array( 'second_level'=>array( 'desired_key'=>'value'))
$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,感谢您通过我的困难措辞和理解我的意思。