Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从文本创建菜单_Php - Fatal编程技术网

Php 从文本创建菜单

Php 从文本创建菜单,php,Php,我对PHP编程非常陌生,不知道各种标签函数的确切语法,比如,split,find,等等。 我有下面的文字 在字符串变量中 $menu = '/home-page|HOME /our-iphone-app|OUR iPhone APP /join-us|JOIN ME /contact-us|CONTACT US'; 我想用这个文本填充数组,一个数组包含管道之前的部分,第二个数组包含管道之后的部分。如何使用一些按char(|)方法进行拆分 最后,数组必须包含 $arraypage = {'0'-

我对PHP编程非常陌生,不知道各种标签函数的确切语法,比如,split,find,等等。 我有下面的文字 在字符串变量中

$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

您需要按新行和管道字符来拆分字符串

$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)

您需要按新行和管道字符来拆分字符串

$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)

我建议您让字符串包含另一个分隔符,如下所示:

$menu = '/home-page|HOME:/our-iphone-app|OUR iPhone APP:/join-us|JOIN ME:/contact-us|CONTACT US';
然后可以使用explode方法将字符串拆分为关联数组

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

我建议您让字符串包含另一个分隔符,如下所示:

$menu = '/home-page|HOME:/our-iphone-app|OUR iPhone APP:/join-us|JOIN ME:/contact-us|CONTACT US';
然后可以使用explode方法将字符串拆分为关联数组

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

我可能会首先在数组中定义数据,而不是将其定义为字符串。我也会以这种格式构建它

$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)
preg\u match\u all('/^(?P[^ |]+)\\\\\\\\\\(?P\\V+\\V*$/m',$menu,$menu数组,preg\u设置顺序)
将$menu_数组设置为我上面使用的格式。
公平地说,使用正则表达式可能有点过火,但我更喜欢正则表达式的功能,它比explode()s的循环更容易在以后添加内容时进行调整。

我可能只是从数组中定义数据开始,而不是作为字符串。我也会以这种格式构建它

$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)
preg\u match\u all('/^(?P[^ |]+)\\\\\\\\\\(?P\\V+\\V*$/m',$menu,$menu数组,preg\u设置顺序)
将$menu_数组设置为我上面使用的格式。
公平地说,使用正则表达式可能有点过火,但我更喜欢正则表达式的功能,当你想添加东西时,它比explode()的循环更容易调整。

你真的想要
$arraytile={'0'->'HOME','2'->'OUR iPhone App'}
,而不是
$arraytile={'0'->'HOME','1'>'OUR iPhone App}
?嗯。我个人建议您在声明菜单时使用另一种语法。为什么要编写一个过于复杂的字符串,将其分解为数组,然后将页面组合在一起,而您也可以组合一个多维数组,例如:
$menu=array(array(“home”)、“/link to home”)、array(“contact-us”、“/contact-us”)
然后直接访问条目。不过这只是一个偏好问题。你真的想要
$arraytile={'0'->'HOME','2'->'OUR iPhone App'}
,而不是
$arraytile={'0'->'HOME','1'->'OUR iPhone App'}
?嗯。我个人建议你在声明菜单时使用另一种语法。为什么要编写一个过于复杂的字符串,将其分解为数组,然后将页面组合在一起,而您也可以组合一个多维数组,例如:
$menu=array(array(“home”)、“/link to home”)、array(“contact-us”、“/contact-us”)
然后直接访问条目。不过,这只是偏好的问题。