2016-11-05 116 views
0

我有一个字符串需要转换为数组。 这是我的字符串,我有一个变量:将包含数组元素的字符串转换为数组

$text ='"list_Menu1"=>"root","list_Submenu1"=>"Menu1","list_Submenu2"=>"Menu1","list_Menu2"=>"root",' 

我想将它插入到一个这样的数组:

$tree = array(
    "list_Menu1" => "root", 
    "list_Submenu2" => "list_Menu1", 
    "list_Submenu3" => "list_Menu1", 
    "list_Menu2" => "root",); 

我试图生成数组这样做:$tree = array($text),但它不起作用。我怎么能这样做,我有点失落。

+0

$树=爆炸( “”,$文本) ;爆炸函数http://php.net/manual/en/function.explode.php –

+0

你可以做一件事使用str_replace在你的字符串中用“:”替换“=>”然后你可以使用json_decode()来获得数组从字符串 –

+0

你怎么样只是自己创建数组,因为我可以看到它是相关的,例如$ text = []; $ text [] = ['list menu'=> $ value,'list_sub => $ value]等 –

回答

2

试试这个

$text ='"list_Menu1"=>"root","list_Submenu1"=>"Menu1","list_Submenu2"=>"Menu1","list_Menu2"=>"root",'; 

    $text = str_replace("=>",":",$text); 
    // trim last coma 
    $text = trim($text,","); 
    $text = "{".$text."}"; 
    $array = json_decode($text,true); 

    var_dump($array); 
+0

非常感谢!!!,此代码实际上是最短,最简单的:) – user2312198

+0

很酷,除了我的答案,如果它适合你:) –

1

Explode通过逗号(,)的字符串和删除空值索引array_filter可以使用。

$text ='"list_Menu1"=>"root","list_Submenu1"=>"Menu1","list_Submenu2"=>"Menu1","list_Menu2"=>"root",'; 
$tree = array_filter(explode(',', $text)); 

print '<pre>'; 
print_r($tree); 
print '</pre>'; 
+0

嗨,这个代码我得到这个,但[0],[1]的部分帮助我根本没有 Array ( [0] => “list_Menu1”=> “根” [1] => “list_Submenu1”=> “菜单1” [2] => “list_Submenu2”=> “菜单1” [3] => “list_Menu2”=>“root” ) – user2312198

1

希望这有助于: -

<?php 

function str_to_arr($str) { 
    $str = str_replace('"',"",$str); 
    $arr = explode(',',$str); 
    for($i=0;$i<count($arr);$i++) { 
    if($arr[$i]!="") { 
     $tmp_arr = explode('=>',$arr[$i]); 
     $arr2[$tmp_arr[0]] = $tmp_arr[1]; 
    } 
    } 
    return $arr2; 
} 

$text ='"list_Menu1"=>"root","list_Submenu1"=>"Menu1","list_Submenu2"=>"Menu1","list_Menu2"=>"root",'; 
$arr = str_to_arr($text); 
print_r($arr); 

?> 
+0

嗨Samay,非常感谢这个代码真的很棒 – user2312198

1

str_replace函数的组合和爆炸会做的伎俩。那就是:

$text ='"list_Menu1"=>"root","list_Submenu1"=>"Menu1","list_Submenu2"=>"Menu1","list_Menu2"=>"root"'; 
$new_text = explode(",", str_replace("\"","", $text)); 
$new_arr_ = array(); 
foreach($new_text as $values) { 
    $new_values = explode("=>", $values); 
    $new_arr_[$new_values[0]] = $new_values[1]; 
} 

echo '<pre>'; 
var_dump($new_arr_); 
echo '</pre>'; 
+0

嗨L. Herrera,这段代码也工作非常感谢您的帮助:) – user2312198

2

它有点长镜头,但它工作太..

function objectToArray($d) { 
    if (is_object($d)) { 
     $d = get_object_vars($d); 
    } 

    if (is_array($d)) { 
     return array_map(__FUNCTION__, $d); 
    } 
    else { 
     return $d; 
    } 
}  

$text ='"list_Menu1"=>"root","list_Submenu1"=>"Menu1","list_Submenu2"=>"Menu1","list_Menu2"=>"root",'; 

$text = str_replace("=>",':',$text); 
$text = rtrim($text,","); 
$text = '{'.$text.'}'; 

$text = json_decode($text); 
$text = objectToArray($text); 
print_r($text); 
+0

这也很好看,它看起来像user3273700答案,我看到通过添加参数$ array = json_decode($ text,true);你可以做到这一点,而不使用函数 – user2312198

+0

它不是那样工作..这就是我必须包含objectToArray函数的原因.. – Jaimin

相关问题