Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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,这里我有从file.txt读取的文本,如下所示(无关闭标记) [标题] [主要标题] 示例新闻1 [标题-SUB] 标题sub1 [内容] 内容文本1 [标题] [主要标题] 示例新闻2 [标题-SUB] 标题sub2 [内容] 内容文本2 [标题] 我想让数组看起来像这样 和数组键按[HEAD]标记拆分 [0] => array( 'TITLE-MAIN' => 'example news1', 'TITLE-SUB' => 'title sub1', 'CONTEN

这里我有从file.txt读取的文本,如下所示(无关闭标记)

[标题]

[主要标题]

示例新闻1

[标题-SUB]

标题sub1

[内容]

内容文本1


[标题]

[主要标题]

示例新闻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);


?>