Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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_Arrays_Multidimensional Array - Fatal编程技术网

Php将数据分解为数组

Php将数据分解为数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我资助了几篇文章将数据分解为数组,但我的文章有点具体,因为数据有两部分 我有这个 title=Title1|link=Link1 title=Title2|link=Link2 我需要的结果就是这个 Array ( [0] => Array ( [title] => Title1 [link] => Link1 ) [1] => Array (

我资助了几篇文章将数据分解为数组,但我的文章有点具体,因为数据有两部分

我有这个

title=Title1|link=Link1
title=Title2|link=Link2
我需要的结果就是这个

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

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

        )

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

谢谢大家!

preg_match_all('~^title=(.+)\|link=(.+)$~m', $text, $reg, PREG_SET_ORDER);
print\r($reg)
products

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

    [1] => Array
        (
            [0] => title=Title2|link=Link2
            [1] => Title2
            [2] => Link2
        )

)

我相信您可以很容易地修改它以符合您所需的模式。

可能类似于这样,它有点冗长,但您应该能够将其用作更优雅的基础

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

我更喜欢
explode()
而不是
preg\u 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);

?>


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

等等,为什么要使用两个标题变量?请进一步解释。一个标题变量中怎么可能有两个值?请粘贴一些实际的代码。Thanks@Hoseph@Vasanthan.R.P是实际的代码,数据来自textarea,由\R分隔,但我不知道它是如何生成和数组的。我将$text设置为我拥有的数据并打印输出。我同意,
preg\u match
可能是一个很好的选择。好的,你能使用我给出的示例吗,例如,$data=“title=Title1 | link=Link1\ntitle=Title2 | link=Link2”@Benn,输出数组位于
$reg
中。请参阅
print\r($reg)
(或者-如果需要捕获print\r的输出,请使用
$str=print\r($reg,true)
)。很高兴在代码中看到注释。对于实际工作的代码,+1,并且还精确返回OP要求的输出。实际上更干净、更有序,谢谢!会来的。我只需将答案更改为您的答案,这就是我所说的干净编码,非常感谢!非常欢迎您。不过@Czechnology为您提供了一个一句妙语让你90%的成功!感谢所有在头脑风暴2小时后几秒钟内帮助我的人