Как преобразовать массив в многомерный массив с помощью специальных ключей с помощью PHP? - PullRequest
0 голосов
/ 17 сентября 2018

у меня есть массив

$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 голосов
/ 17 сентября 2018

Используйте array_map для результата array_chunck следующим образом:

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

обратите внимание, что второй параметр array_chunk зависит от количества столбцов и первого массива, используемого в array_combineслишком

см. рабочий код здесь

0 голосов
/ 17 сентября 2018

Перебрать массив и проверить ключ элементов, и на его основе создать новый массив и вставить в него значения.

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

Результат проверки в демо

0 голосов
/ 17 сентября 2018

Простое, но часто используемое решение состоит в том, чтобы использовать многомерный массив со строковыми ключами для лучшей читаемости:

$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
}
0 голосов
/ 17 сентября 2018

Вы также можете сделать так:

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

print_r($array3);
0 голосов
/ 17 сентября 2018

Поскольку массив в 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;
?>
0 голосов
/ 17 сентября 2018

да, просто используйте двумерный массив

$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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...