如何使用php使用特殊键将数组转换为多维数组?

时间:2018-09-17 08:28:12

标签: php arrays multidimensional-array

我有一个数组

$array = [
    0=>1 
    1=>Jon 
    2=>jon@email.com 
    3=>2 
    4=>Doe 
    5=>doe@email.com 
    6=>3
    7=>Foo 
    8=>foo@email.com
]

我想做的就是为每个值增加额外的价值。 这样的事情,所以当我遍历数组时可以访问它

$array=[
    0=>1[id] 
    1=>Jon[name] 
    2=>jon@email.com[email] 
    3=>2[id] 
    4=>Doe[name] 
    5=>doe@email.com[email] 
    6=>3[id] 
    7=>Foo[name] 
    8=>foo@email.com[email]
]

我想这将是一个多维数组? 正确的做法是什么?

6 个答案:

答案 0 :(得分:3)

遍历数组并检查项的键,然后基于它创建新数组并在其中插入值。

$newArr = [];    
foreach($array as $key=>$value){
    if ($key % 3 == 0)
        $newArr[] = ["id" => $value];
    if ($key % 3 == 1)
        $newArr[sizeof($newArr)-1]["name"] = $value;
    if ($key % 3 == 2)
        $newArr[sizeof($newArr)-1]["email"] = $value;
}

demo中查看结果

答案 1 :(得分:0)

是的,只使用二维数组

$arr = array();

$arr[0][0] = "1"
$arr[0][1] = "Jon"
$arr[0][2] = "jon@email.com"

$arr[1][0] = "2"
$arr[1][1] = "Doe"
$arr[1][2] = "doe@email.com"

答案 2 :(得分:0)

由于数组是PHP中的映射,因此建议将其像映射一样使用或创建一个保存数据的类。

$arr = array();
$arr[0]['ID'] = 1;
$arr[0]['name'] = "John";
$arr[0]['mail'] = "john@email.com;

一个课程的示例:

 <?PHP
 class User
    {
        public $id;
        public $name;
        public $mail;

        function __construct($ID,$name,$mail)
        {
            $this->id = $ID;
            $this->name = $name;
            $this->mail = $mail;
        }
    }
?>

然后您可以像这样简单地使用它:

 <?PHP
    require_once("User.php");
    $user = new User(1,"Mario","maio290@foo.bar");
    echo $user->name;
?>

答案 3 :(得分:0)

您也可以这样:

$array1 = ["name"=>"alaex","class"=>4];
$array2 = ["name"=>"aley","class"=>10];
$array3 = ["student"=>$array1,"student2"=>$array2];

print_r($array3);

答案 4 :(得分:0)

一个简单但经常使用的解决方案是使用带有字符串键的多维数组以提高可读性:

$array = [
    0 => [
        'id'    => 1,
        'name'  => 'Jon',
        'email' => 'jon@email.com',
    ],
    1 => [
        'id'    => 2,
        'name'  => 'Doe',
        'email' => 'doe@email.com',
    ],
    2 => [
        'id'    => 3,
        'name'  => 'Foo',
        'email' => 'foo@email.com',
    ],
];

您可以像这样循环遍历:

for ($array as $item) {
    // $item['id']
    // $item['name']
    // $item['email']
}

但是由于PHP是一种面向对象的语言,所以建议您为数据结构创建一个类。这甚至更易于阅读,并且您可以非常轻松地添加与实体等相关的功能。

class Person {
    public $id;
    public $name;
    public $email;

    function __construct($id, $name, $email) {
        $this->id = $id;
        $this->name = $name;
        $this->email = $email;
    }
}

$array = [
    0 => new Person(1, 'Jon', 'jon@email.com'),
    1 => new Person(2, 'Doe', 'doe@email.com'),
    2 => new Person(3, 'Foo', 'foo@email.com'),
];

您可以像这样循环遍历:

for ($array as $person) {
    // $person->id
    // $person->name
    // $person->email
}

答案 5 :(得分:0)

以这种方式在array_map的结果上使用array_chunck

 $array=array_map(function($val){ return array_combine(['id','name','email'],$val);}, array_chunk($array,3));

请注意,array_chunk的第二个参数也取决于列数和array_combine中使用的第一个数组

请参见working code here