2011-03-08 58 views
0

我对PHP编程非常陌生,不知道各种实验功能(如分割,查找等)的确切语法。 我有以下中的字符串变量与我 文本从文本创建菜单

$menu = '/home-page|HOME 
/our-iphone-app|OUR iPhone APP 
/join-us|JOIN ME 
/contact-us|CONTACT US'; 

我要填充与管道之前含有部本文一个阵列到阵列|第二个阵列包含管道后的部分。如何使用char(|)方法进行一些拆分。

最后阵列必须包含

$arraypage = {'0'->'/home-page','1'->'/our-iphone-app'} // etc, and... 
$arrayTitle = {'0'->'HOME','2'->'OUR iPhone App'} // etc 
+0

感谢查理编辑 – Abhi 2011-03-08 10:54:41

+0

你真的想''arrayTitle = {'0' - >'HOME','2' - >'我们的iPhone应用'}',而不是'$ arrayTitle = {'0' - > 'HOME','1' - >'我们的iPhone应用程序'}'? – 2011-03-08 10:58:11

+3

嗯。我个人建议你在声明菜单时使用另一种语法。为什么要编写一个过于复杂的字符串,将它解析为数组,然后将页面放在一起,当你也可以放在一起的多维数组,如:'$ menu = array(array(“home”,“/ link- home“),array(”联系我们“,”/ contact-us“));'然后直接访问条目。不过,只是一个偏好问题。 – slhck 2011-03-08 11:01:31

回答

1

您需要通过新的生产线,打破了字符串,然后通过管道符。所产生的阵列

$lines = explode("\n", $menu); 
$arraypage = array(); 
$arrayTitle = array(); 

foreach($lines as $line) { 
    list($arraypage[], $arrayTitle[]) = explode('|', $line); 
} 

的var_dump给出:

array 
    0 => string '/home-page' (length=10) 
    1 => string '/our-iphone-app' (length=15) 
    2 => string '/join-us' (length=8) 
    3 => string '/contact-us' (length=11) 

array 
    0 => string 'HOME' (length=4) 
    1 => string 'OUR iPhone APP' (length=14) 
    2 => string 'JOIN ME' (length=7) 
    3 => string 'CONTACT US' (length=10) 
+0

感谢雅各布试图在我的网站上运行此代码 – Abhi 2011-03-08 10:58:34

1
$array = explode("\n", $array); 
$result1 = array(); 
$resutl2 = array(); 

foreach($array as $arr){ 
    $temp = explode('|', $arr); 
    $result1[] = $temp[0]; 
    $result2[] = $temp[1]; 
} 
1

我建议你让你的字符串包含另一个分离器,像这样:

$menu = '/home-page|HOME:/our-iphone-app|OUR iPhone APP:/join-us|JOIN ME:/contact-us|CONTACT US'; 

然后你就可以使用爆炸方法将您的字符串拆分为关联数组。

$array = explode(":", $menu); 
foreach($array as $key => $val) { 
    $array[$key] = explode("|", $val); 
} 
1

我可能只是定义数组中的数据开始,而不是字符串。我也建立它的格式

$menu_array = { 
    {'url'=>'/home-page','text'=>'HOME'}, 
    {'url'=>'/our-iphone-app','text'=>'OUR iPhone APP'}, 
    {'url'=>'/join-us','text'=>'JOIN ME'}, 
    {'url'=>'/contact-us','text'=>'CONTACT US'}, 
}; 

因为这几乎肯定会更有用,无论你下一步做什么。

如果你确实需要使用字符串,但是我会说正则表达式是最简单的方法。以下内容:

preg_match_all('/^(?P<url>[^|]+)\\|(?P<text>\\V+)\\v*$/m',$menu,$menu_array,PREG_SET_ORDER) 

会将$ menu_array设置为我上面使用的格式。 公平地说,使用正则表达式可能有点矫枉过正,但我​​更喜欢正则表达式的强大功能,当您想要添加事物时比后面的explode()循环更容易调整。