通过基于特定值分隔每一行,在PHP中创建多维数组

this is the array I have.

Array
(
   [0] => name:string:255
   [1] => weight:integer
   [2] => description:string:255
   [3] => age:integer
)

I want it to look like this

NewArray
(
  [0] => Array
      (
         [0] => name 
         [1] => string
         [2] => 255
  [1] => Array
      (
         [0] => weight
         [1] => integer
  [2] => Array
      (
         [0] => description
         [1] => string
         [2] => 255
  [3] => Array
      (
         [0] => age
         [1] => integer
)

Or better yet, I'd prefer this result. Making two separate arrays based off the number of groups.

NewArray1
(
  [0] => Array
      (
         [0] => name 
         [1] => string
         [2] => 255
  [1] => Array
      (
         [0] => description
         [1] => string
         [2] => 255
)

NewArray2
(
  [0] => Array
      (
         [0] => weight
         [1] => integer
  [1] => Array
      (
         [0] => age
         [1] => integer
)

I've tried exploding and implode and foreaching but I'm not quite getting the result I want. Thanks in advanced!

Try this:

<?php

$array = array("name:string:255", "weight:integer", "description:string:255", "age:integer");

function map_func($value) {
    return explode(':', $value);
}

$newArray = array_map(map_func, $array);

echo "Output 1:
";
print_r($newArray);

$sorted = array();

foreach($newArray as $el)
    $sorted[$el[1]][] = $el;

echo "Output 2:
";
print_r($sorted);

Output:

Output 1:
Array
(
    [0] => Array
        (
            [0] => name
            [1] => string
            [2] => 255
        )

    [1] => Array
        (
            [0] => weight
            [1] => integer
        )

    [2] => Array
        (
            [0] => description
            [1] => string
            [2] => 255
        )

    [3] => Array
        (
            [0] => age
            [1] => integer
        )

)
Output 2:
Array
(
    [string] => Array
        (
            [0] => Array
                (
                    [0] => name
                    [1] => string
                    [2] => 255
                )

            [1] => Array
                (
                    [0] => description
                    [1] => string
                    [2] => 255
                )

        )

    [integer] => Array
        (
            [0] => Array
                (
                    [0] => weight
                    [1] => integer
                )

            [1] => Array
                (
                    [0] => age
                    [1] => integer
                )

        )

)

I doubt the following is the best solution but it does return what you wanted.

$array = array(
   "0" => "name:string:255",
   "1" => "weight:integer",
   "2" => "description:string:255",
   "3" => "age:integer"
);

foreach ($array as $key => $val) {
   foreach (explode(':', $val) as $part) {
      $new_array[$key][] = $part;
   }
}

print_r($new_array);

above returns the following.

Array
(
    [0] => Array
        (
            [0] => name
            [1] => string
            [2] => 255
        )

    [1] => Array
        (
            [0] => weight
            [1] => integer
        )

    [2] => Array
        (
            [0] => description
            [1] => string
            [2] => 255
        )

    [3] => Array
        (
            [0] => age
            [1] => integer
        )

)

Use array_reduce() to build a new array while iterating over the old, splitting it up by type:

$array = [
    'name:string:255',
    'weight:integer',
    'description:string:255',
    'age:integer',
];

$result = array_reduce($array, function(&$result, $item) {
    $parts = explode(':', $item, 3);
    $result[$parts[1]][] = $parts;

    return $result;
}, []);

So you have a 1-dimentional array of strings ($arr01) . strings are separated by :

and you need to have a 2-dimentional array ($arr02) where the second dimension is an array of strings composed by splitting the initial set of strings based on their separator character :

$arr01 = array("name:string:255", "weight:integer", "description:string:255", "age:integer");

$arr02 = array(array());
for($i=0; $i<sizeof($arr01); $i++) {
    $arr02[$i] = explode(":",$arr01[$i]);
}

display the two arrays....

echo "array 01: <br>";
for($i=0; $i<sizeof($arr01); $i++) {
echo "[".$i."] ".$arr01[$i]."<br>";
}

echo "<br><br>";
echo "array 02: <br>";
for($i=0; $i<sizeof($arr01); $i++) {
    echo "[".$i."] ==> <br>";
    for($j=0; $j<sizeof($arr02[$i]); $j++) {
        echo "&nbsp;&nbsp;&nbsp;&nbsp;[".$j."] ".$arr02[$i][$j]." <br>";
    }
}
echo "<br><br>";