在多维数组的未知深度中存储值

时间:2014-03-17 01:15:25

标签: php indexing depth

我把这条exath路径保存在某个地方:

Array
(
    [0] => library
    [1] => 1
    [2] => book
    [3] => 0
    [4] => title
    [5] => 1
)

我有一些数组,我想更改此索引的值:

$values[library][1][book][0][title][1] = "new value";

我不知道怎么做,因为可以有任何(未知)维数。任何提示?

5 个答案:

答案 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 ) ) )