[英]multidimension array
I want to create a multidimensional array based on a string. 我想基于字符串创建多维数组。
the string has value $string="1/2/3"
字符串的值
$string="1/2/3"
and i want to assign $array[1][2][3]=somethimg
我想分配
$array[1][2][3]=somethimg
actually the index of the array are described inside the $string 实际上数组的索引是在$ string中描述的
The $string has not same depth. $ string的深度不同。
For example may be $string="1/2 OR $string="1/2/3/4/5 OR $string="1/2/3/5/7/8/9/9/6 so the number of keys in the multidimensional array is not standard 例如,可能是$ string =“ 1/2 OR $ string =” 1/2/3/4/5 OR $ string =“ 1/2/3/5/7/8/9/9/6多维数组中的键数不是标准的
Any ideas. 有任何想法吗。
$string = '1/2/3';
list($x, $y, $z) = explode('/', $string);
$array[$x][$y][$z] = 'something';
Try with 试试看
<?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>';
?>
Much simplier version 更简单的版本
<?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>';
?>
Some people could kill me for the eval function, but it works in this case perfectly :-P 有人可以为我的eval函数杀死我,但是在这种情况下它可以完美地工作:-P
Assuming your string format: 假设您的字符串格式:
list($lev1, $lev2, $lev3) = explode('/', $string);
$array[$lev1][$lev2][$lev3] = $something;
After your edit -- you can use a recursive function like this: 编辑后-您可以使用如下递归函数:
$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;
}
}
Here's a recursive solution that would work for any number of indices: 这是适用于任意数量索引的递归解决方案:
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);
Output: 输出:
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 ) ) )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.