我资助了一些帖子将数据分解为数组,但我的有点具体,因为数据有两部分
我有这个
title=Title1|link=Link1
title=Title2|link=Link2
我需要的结果是这样的
Array
(
[0] => Array
(
[title] => Title1
[link] => Link1
)
[1] => Array
(
[title] => Title2
[link] => Link2
)
)
数据来自 texarea 分隔 所以您看到的数据是实际数据。
preg_match_all('~^title=(.+)\|link=(.+)$~m', $text, $reg, PREG_SET_ORDER);
print_r($reg)
产生
Array
(
[0] => Array
(
[0] => title=Title1|link=Link1
[1] => Title1
[2] => Link1
)
[1] => Array
(
[0] => title=Title2|link=Link2
[1] => Title2
[2] => Link2
)
)
我确信您可以轻松修改它以适合您所需的架构。
当你实际上不需要正则表达式时,我更喜欢
explode()
而不是 preg_match()
。
<?php
$text="title=Title1|link=Link1\ntitle=Title2|link=Link2";
$result=array();
$count=0;
// line by line...
foreach (explode("\n", $text) as $line) {
// variable by variable...
foreach (explode("|", $line) as $vars) {
// separate LHS from RHS.
$parts=explode("=", $vars);
$result[$count][$parts[0]]=$parts[1];
}
$count++;
}
print_r($result);
?>
不要忘记添加代码来处理与您期望的模式不匹配的行。 输入验证很重要。
也许像这样,它有点冗长,但你应该能够使用它作为更优雅的东西的基础。
<?
$result=array();
foreach ($line in $iterable_variable_with_one_line_per_iteration){
$subresult=array();
foreach ($kv_pair in explode($line,"|")){
$kv_pair_2 = explode($kv_pair,"=");
$subresult[kv_pair_2[0]]=$kv_pair_2[1];
}
array_push($result,$subresult);
}
?>