我想創建一個基於字符串的多維數組。多維數組
,所述串具有值$string="1/2/3"
,我想分配$array[1][2][3]=somethimg
實際上該陣列的索引是在$串
的$字符串內描述有不相同的深度。
例如可能是$ string =「1/2 OR $ string =」1/2/3/4/5 OR $ string =「1/2/3/5/7/8/9/9/6 所以多維數組中的鍵的數量不達標
任何想法
我想創建一個基於字符串的多維數組。多維數組
,所述串具有值$string="1/2/3"
,我想分配$array[1][2][3]=somethimg
實際上該陣列的索引是在$串
的$字符串內描述有不相同的深度。
例如可能是$ string =「1/2 OR $ string =」1/2/3/4/5 OR $ string =「1/2/3/5/7/8/9/9/6 所以多維數組中的鍵的數量不達標
任何想法
嘗試用
<?php
$ind = '1/2/3/4/5/6/7/8/9/10/11/12';
$ind = '[' . join('][', explode('/',$ind)) . ']';
$fn = create_function('$var, $val','global ${$var}; ${$var}'. $ind. '= $val;');
$array = array();
$fn("array", "something");
echo '<pre>'.print_r($array, true).'</pre>';
?>
大部分simplier版本
<?php
$ind = '1/2/3/4/5/6/7/8/9/10/11/12';
$ind = '[' . join('][', explode('/',$ind)) . ']';
$array = array();
$val = "something";
eval('$array'.$ind.'=$val;');
echo '<pre>'.print_r($array, true).'</pre>';
?>
有些人會殺了我的eval函數,但在這種情況下,完全:-P
$string = '1/2/3';
list($x, $y, $z) = explode('/', $string);
$array[$x][$y][$z] = 'something';
對不起,我編輯我qieustion – ntan 2010-01-31 10:34:31
假設你的字符串格式:
list($lev1, $lev2, $lev3) = explode('/', $string);
$array[$lev1][$lev2][$lev3] = $something;
您的編輯後 - 你可以使用遞歸功能如下:
$string = '1/2/3/4/5/6/7/8';
$value = 'something';
print_r(build_array($string, $value));
function build_array($string, $value, $array = array()) {
list($key, $rest) = explode('/', $string, 2);
if ($key) {
$array = array(
$key => build_array($rest, $value, $array[$key])
);
return $array;
} else {
return $value;
}
}
這裏有一個遞歸解決方案,爲任意數量的指數的工作:
function set_by_indices(&$arr, $indices, $val) {
if (count($indices) == 1) {
$arr[$indices[0]] = $val;
} else {
set_by_indices($arr[$indices[0]], array_slice($indices, 1), $val);
}
}
$arr = array(array(array(1 => 1, 2 => 4),
array(1 => -1, 2 => -2)),
array(array(1 => 11, 2 => 14),
array(1 => -11, 2 => -12)));
$str = '0/0/1';
$indices = explode('/', $str);
print_r($arr);
set_by_indices($arr, $indices, 99);
echo '<br/>';
print_r($arr);
輸出:
Array ([0] => Array ([0] => Array ([1] => 1 [2] => 4) [1] => Array ([1] => -1 [2] => -2)) [1] => Array ([0] => Array ([1] => 11 [2] => 14) [1] => Array ([1] => -11 [2] => -12)))
Array ([0] => Array ([0] => Array ([1] => 99 [2] => 4) [1] => Array ([1] => -1 [2] => -2)) [1] => Array ([0] => Array ([1] => 11 [2] => 14) [1] => Array ([1] => -11 [2] => -12)))
,用來獲取,而不是設置工程工作。 – 2010-01-31 10:48:27
我的不好。在編輯中修復。同樣的想法適用,除了東西通過引用傳遞。 – 2010-01-31 11:00:13
非常感謝,它的工作非常完美。 – ntan 2010-01-31 11:22:41
我添加了另一個解決方案。它非常簡單。 – Rafael 2010-01-31 11:24:38