繁体   English   中英

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

[英]How to convert array to multidimensional array with special keys using php?

我有一个阵列

$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]
]

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

循环遍历数组并检查项的键,并根据它创建新数组并在其中插入值。

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

演示中检查结果

是的只是使用2维数组

$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"

由于数组是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;
?>

你也可以这样做:

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

print_r($array3);

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

$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
}

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

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

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

这里查看工作代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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