简体   繁体   中英

Changing \n into ARRAY values within another ARRAY

I have this ARRAY sent from a FORM

Array
(
    [0] => one
two
three
    [1] => hello
how
are
)

Since the values are sent via textarea from a form, it has line breakers, so I want to make change every
into a array field like so:

Array
(
    [0] => Array
        (
            [0] => one
            [1] => two
            [2] => three
        )

    [1] => Array
        (
            [0] => hello
            [1] => how
            [2] => are
        )

)

This is what I have so far:

foreach ($array as &$valor) {   
    foreach(preg_split("/((\r?\n)|(\r\n?))/", $valor) as $line){
    $arraynew[] = $line;
}
}

But I get this result

Array
(
    [0] => one
    [1] => two
    [2] => three
    [3] => hello
    [4] => how
    [5] => are
)

What am I doing wrong? :(

For each key in the POST array, pop a value onto the final array, with it's values containing an array whoses values represent each line in value of the POST array.

<?php
$data = array(
 0 => "one\ntwo\nthree", 
 1 => "hello\nhow\nare"
);

$final = array();
for($i = 0; $i < count($data); $i++) {
  $row = preg_split('/\n/', $data[$i]);
  if(is_array($row)) {
    for($j = 0; $j < count($row); $j++) {
      $final[$i][] = $row[$j];
    }
  }
}

var_dump($final);

array(2) {
  [0] =>
  array(3) {
    [0] =>
    string(3) "one"
    [1] =>
    string(3) "two"
    [2] =>
    string(5) "three"
  }
  [1] =>
  array(3) {
    [0] =>
    string(5) "hello"
    [1] =>
    string(3) "how"
    [2] =>
    string(3) "are"
  }
}

DEMO

Well, you're really working too hard.

array_map(function($e) { return explode("\n", $e); }, $orig_array);

is all you need. You could use preg_split if you really want, but explode is enough.

You can simply do this

 $array=array("one\ntwo\nthree","hello\nhow\nare");
 $arraynew=array();
 foreach ($array as &$valor) {   
 $arraynewtemp=array();
 foreach(preg_split("/((\r?\n)|(\r\n?))/", $valor) as $line){
 $arraynewtemp[] = $line;
 }
 array_push($arraynew,$arraynewtemp);
 }

 var_dump($arraynew);

Will output

 array(2) {
 [0]=>
  array(3) {
  [0]=>
   string(3) "one"
  [1]=>
   string(3) "two"
  [2]=>
   string(5) "three"
   }
 [1]=>
  array(3) {
  [0]=>
   string(5) "hello"
  [1]=>
   string(3) "how"
  [2]=>
   string(3) "are"
 }
}

This should works

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM