Php将数据爆炸到数组

时间:2012-02-20 03:51:47

标签: php arrays multidimensional-array

我资助了几个帖子将数据作为数组进行爆炸,但我的数据有点特定,因为数据有两部分

我有这个

title=Title1|link=Link1
title=Title2|link=Link2

我需要的结果就是这个

Array
(
    [0] => Array
        (
            [title] => Title1
            [link] => Link1
        )

    [1] => Array
        (
            [title] => Title2
            [link] => Link2

        )

)

数据来自texarea,由\ n分隔,因此您看到的数据是实际数据

谢谢你!

3 个答案:

答案 0 :(得分:6)

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
        )

)

我确定您可以轻松修改它以符合您所需的架构。

答案 1 :(得分:2)

当你实际上不需要正则表达式时,我更喜欢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);

?>

不要忘记添加代码来处理与您期望的模式不匹配的行。输入验证很重要。

答案 2 :(得分:1)

也许这样的事情,它有点冗长,但你应该能够用它作为更优雅的基础。

<?
$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);
}
?>