我把这条exath路径保存在某个地方:
Array
(
[0] => library
[1] => 1
[2] => book
[3] => 0
[4] => title
[5] => 1
)
我有一些数组,我想更改此索引的值:
$values[library][1][book][0][title][1] = "new value";
我不知道怎么做,因为可以有任何(未知)维数。任何提示?
答案 0 :(得分:3)
尝试
foreach ($array as $val) {
$indexes .= "[$val]";
}
${'output'.$indexes} = 'something';
或者
$indexes = '';
foreach ($array as $val) {
$indexes .= "[$val]";
}
$output = 'values'.$indexes;
$$output = 'something';
答案 1 :(得分:2)
创建一个执行此操作的函数是有意义的,所以:
function array_path_set(array & $array, array $path, $newValue) {
$aux =& $array;
foreach ($path as $key) {
if (isset($aux[$key])) {
$aux =& $aux[$key];
} else {
return false;
}
}
$aux = $newValue;
return true;
}
$values = array(
'library' => array(
1 => array(
'book' => array(
0 => array(
'title' => array(
1 => 'MAGIC VALUE!',
),
),
),
),
),
);
$path = array('library', 1, 'book', 0, 'title', 1);
$newValue = 'ANOTHER MAGIC VALUE!';
var_dump($values);
var_dump(array_path_set($values, $path, $newValue));
var_dump($values);
答案 2 :(得分:1)
您是否尝试为图书馆1中的图书0的标题提供新值?如果是这样,您将不得不搜索图书馆" 1",书籍" 0"然后更改"标题"的值。因此,如果数组中的所有值都具有相同的六个条目,则从loc = 0开始查看loc + 1(库id),loc + 3(book id)和loc + 5 ...更改标题的值。如果没有将loc增加6并继续搜索。
[听起来像是家庭作业,所以没有提供代码。如果我错了,请原谅我。]
答案 3 :(得分:0)
万一你不知道,关键
$值[ “文库”] [1] [ “书”] [0] [ “标题”] [1]
与帖子中的数组示例不同。假设数组是$ values,它有五个元素:
$values = Array
(
[0] => "library"
[1] => 1
[2] => "book"
[3] => 0
[4] => "title"
[5] => 1
)
$values[0] = "Library";
$values[1] = "1";
$values[2] = "book";
$values[3] = "0";
etc...
这个阵列结构是你的意图吗?如果没有,请回复一个更完整的结构,以便我们提供帮助。
另外,你需要在字符串周围引用 - 为了清晰起见,我已经包含了
您可以查看以下link的array_search。一些海报包括多维数组搜索的示例,还有其他示例。对“多维数组搜索”进行谷歌搜索,您可能会找到解决方案。如果您需要更多指示,请回复您的详细信息。
答案 4 :(得分:0)
试试这个 - >
$keys = array('0'=>'for','1'=>'test','2'=>'only');
$value='ok';
function addArrayPathWithValue($keys,$value,$array = array(),$current =
array())
{
$function = __FUNCTION__;
if (count($current)==0)
{
$keys = array_reverse($keys);
$current = $value;
}
if (count($keys)==0)
{
return $current;
}
$array[array_shift($keys)]=$current;
return $function($keys,$value,NULL,$array);
}
$array = addArrayPathWithValue($keys,$value);
print_r($array);
//output: Array ( [for] => Array ( [test] => Array ( [only] => ok ) ) )