PHP-生成数组算法思路

PHP-生成数组算法思路

虐人心 发布于 2017-05-27 字数 124 浏览 1291 回复 5

$string="a.b.c";
根据这个构造成类似array('a'=>array('b'=>array('c'=>array()))),这种形式的数组,长度不限

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

想挽留 2017-10-29 5 楼

 $str = 'a.b.c.d';
$arr = explode('.', $str);
foreach($arr as $v) {
$eval .= 'array("'.$v.'"=>';
}
$eval = substr($eval,0, -2).str_repeat(")", count($arr)).";";
eval("$res = ".$eval.";");
var_dump($res);

甜柠檬 2017-10-13 4 楼

本地测试通过

<?php
$str = 'a.b.c.d.e.f';
$strArray = explode('.',$str);
$resArray = array();
for($i = count($strArray)-1; $i>=0; $i--){
$char = $strArray[$i];
if($i == count($strArray)-1)
{
$tmp = array($char => array());
}
else
{
$tmp = array($char => $resArray);
}
$resArray = $tmp;
unset($tmp);
}
print_r($resArray);
?>

甜柠檬 2017-09-28 3 楼

$string="a.b.c.e.f";
$arr = eval("return array('" . str_replace('.',"'=>array('",$string) ."'=>array()" .str_repeat(')' ,substr_count($string,'.')+1) . ";");
var_dump($arr);

泛泛之交 2017-08-31 2 楼

 /**
* 转换字符串为数组
* @param string $str 指定要转换的字符串
* @param mixed $value 指定最底层的值
* @param string $seperator 指定字符串的分隔符
* @param Array 返回转换结果
*/
function arrayConvert($str, $value=array(), $seperator='.'){
$x=array();
if($str=trim($str)) eval('$x[''.str_replace('.', "']['", $str).'']=$value;');
return $x;
}

$str = 'a.b.c.d';
print_r(arrayConvert($str));

/**
输出:
Array
(
[a] => Array
(
[b] => Array
(
[c] => Array
(
[d] => array(
)
)

)

)
)
*/

这个如何?

泛泛之交 2017-06-29 1 楼

我用递归给你写了一个,测试也完全通过,代码如下:

$str = 'a.b.c.d';
$ret = processKey(array(), $str);
print_r($ret);

//输出结果如下:
Array ( [a] => Array ( [b] => Array ( [c] => Array ( [d] => Array ( ) ) ) ) )

/**
* @param 预设数组 $arr
* @param 键值 $key
* @param 值 $v
*/
function processKey($arr, $key='', $v=array()){
$item_separator = '.';
$pieces = explode($item_separator, $key, 2);
if(isset($pieces[0]) && isset($pieces[1])){
$flag = strpos($pieces[1],$item_separator);
if($flag !== false){
$arr[$pieces[0]] = '';
$arr[$pieces[0]] = processKey($arr[$pieces[0]],$pieces[1],$v);
}else{
$arr[$pieces[0]][$pieces[1]] = $v;
}
}else{
$arr[$pieces[0]] = $v;
}
return $arr;
}