[php]如何仅获取内部文本<;标签>;并将其构建为阵列
这里我有从file.txt读取的文本,如下所示(无关闭标记) [标题] [主要标题] 示例新闻1 [标题-SUB] 标题sub1 [内容] 内容文本1[php]如何仅获取内部文本<;标签>;并将其构建为阵列,php,Php,这里我有从file.txt读取的文本,如下所示(无关闭标记) [标题] [主要标题] 示例新闻1 [标题-SUB] 标题sub1 [内容] 内容文本1 [标题] [主要标题] 示例新闻2 [标题-SUB] 标题sub2 [内容] 内容文本2 [标题] 我想让数组看起来像这样 和数组键按[HEAD]标记拆分 [0] => array( 'TITLE-MAIN' => 'example news1', 'TITLE-SUB' => 'title sub1', 'CONTEN
[标题] [主要标题] 示例新闻2 [标题-SUB] 标题sub2 [内容] 内容文本2
[标题]
我想让数组看起来像这样 和数组键按[HEAD]标记拆分
[0] => array(
'TITLE-MAIN' => 'example news1',
'TITLE-SUB' => 'title sub1',
'CONTENT' => 'content text1'),
[1] => array(
'TITLE-MAIN' => 'example news2',
'TITLE-SUB' => 'title sub2',
'CONTENT' => 'content text2')
这里有一种方法你可以做到。使用将文本拆分为
[HEAD]
标记周围的部分,然后再次将每个部分拆分为标记。然后,只需将标记名及其内容放入一个数组中:
$text = '[HEAD]
[TITLE-MAIN]
example news1
[TITLE-SUB]
title sub1
[CONTENT]
content text1
[HEAD]
[TITLE-MAIN]
example news2
[TITLE-SUB]
title sub2
[CONTENT]
content text2';
$sections = array();
foreach (preg_split('/\s*\[HEAD\]\s*/', $text, -1, PREG_SPLIT_NO_EMPTY) as $section) {
$s = trim($section);
$tag_data = preg_split('/\[([^\]]+)\]/', $s, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
for ($i = 0; $i < count($tag_data); $i += 2) {
$tags[$tag_data[$i]] = trim($tag_data[$i+1]);
}
$sections[] = $tags;
}
print_r($sections);
您可以将
explode
函数与foreach
一起使用
这是代码
<?php
function multiexplode ($delimiters,$string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
$text = file_get_contents('your_file.txt');
//$exploded = multiexplode(array("[","]"),$text);
$exploded=explode('[HEAD]', $text);
echo "<pre>";
// print_r($exploded);
// exit;
$data = array();
$count=0;
foreach ($exploded as $key => $value) {
$multi_explode=multiexplode(array("[","]"),$value);
foreach ($multi_explode as $key1 => $value1) {
if($value1=='TITLE-MAIN'){
$data[$count]['TITLE-MAIN']=trim($multi_explode[$key1+1]);
}
if($value1=='TITLE-SUB'){
$data[$count]['TITLE-SUB']=trim($multi_explode[$key1+1]);
}
if($value1=='CONTENT'){
$data[$count]['CONTENT']=trim($multi_explode[$key1+1]);
}
}
$count++;
}
print_r($data);
?>
您可以检查所需的“我想让阵列看起来像这样”您做了什么来达到您想要的目的吗?如果是,请发布代码(在您的问题中,而不是评论中)。堆栈溢出不是代码编写服务。我们总是很乐意帮助和支持新的程序员,但你需要先帮助自己。您应该尝试自己编写代码。请阅读。我已经为此编写了代码,但您的代码是最小的和良好的优化代码。好的+1@BilalAhmed谢谢-仅使用PHP已经提供给我们的工具。:)
<?php
function multiexplode ($delimiters,$string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
$text = file_get_contents('your_file.txt');
//$exploded = multiexplode(array("[","]"),$text);
$exploded=explode('[HEAD]', $text);
echo "<pre>";
// print_r($exploded);
// exit;
$data = array();
$count=0;
foreach ($exploded as $key => $value) {
$multi_explode=multiexplode(array("[","]"),$value);
foreach ($multi_explode as $key1 => $value1) {
if($value1=='TITLE-MAIN'){
$data[$count]['TITLE-MAIN']=trim($multi_explode[$key1+1]);
}
if($value1=='TITLE-SUB'){
$data[$count]['TITLE-SUB']=trim($multi_explode[$key1+1]);
}
if($value1=='CONTENT'){
$data[$count]['CONTENT']=trim($multi_explode[$key1+1]);
}
}
$count++;
}
print_r($data);
?>