I've been struggling for a while trying to put these 2 arrays together and I'm wondering if you please may give me a hand here.
Here is my array1
$array1 = array('Name', 'Code', 'Email');
Here is my array2
$array2 = array(
'user1', '12345', 'user1@example.com',
'user2', '12345', 'user2@example.com',
'user3', '12345', 'user3@example.com',
'user4', '12345', 'user4@example.com',
'user5', '12345', 'user5@example.com',
'user6', '12345', 'user6@example.com'
);
I'm trying to come up with a new array where the indexes are the elements of array1 ('Name', 'code', 'email')... so it can end up as the following:
$array3 = (
'Name'=>'user1', 'Code'=>'12345', 'Email'=>'user1@example.com'
'Name'=>'user2', 'Code'=>'12345', 'Email'=>'user2@example.com'
'Name'=>'user3', 'Code'=>'12345', 'Email'=>'user3@example.com'
'Name'=>'user4', 'Code'=>'12345', 'Email'=>'user4@example.com'
'Name'=>'user5', 'Code'=>'12345', 'Email'=>'user5@example.com'
'Name'=>'user6', 'Code'=>'12345', 'Email'=>'user6@example.com'
);
The reason of all this is to send it via json to a jquery response to present it to a table.
Would you please help me?
Thanks in advance.
Assuming that you have and array of arrays:
$array1 = array('Name', 'Code', 'Email');
$array2 = array(
['user1', '12345', 'user1@example.com'],
['user2', '12345', 'user2@example.com'],
['user3', '12345', 'user3@example.com'],
['user4', '12345', 'user4@example.com'],
['user5', '12345', 'user5@example.com'],
['user6', '12345', 'user6@example.com']
);
$array3 = [];
foreach($array2 as $a2) {
$array3[] = array_combine ($array1 , $a2 );
}
var_dump($array3);
That will work. Otherwise, you gonna need a different approach, like this:
$array1 = array('Name', 'Code', 'Email');
$array2 = array(
'user1', '12345', 'user1@example.com',
'user2', '12345', 'user2@example.com',
'user3', '12345', 'user3@example.com',
'user4', '12345', 'user4@example.com',
'user5', '12345', 'user5@example.com',
'user6', '12345', 'user6@example.com'
);
$array3 = [];
$i = 0;
foreach($array2 as $a2) {
$i++;
$tempArray[] = $a2;
if($i % 3 == 0) { //if is the 3rd element, combine then reset tempArray
$array3[] = array_combine ($array1 , $tempArray );
$tempArray = [];
}
}
var_dump($array3);
You can array_map
to loop thru $array2
and use array_combine
to assign the $array1
as key on each loop
$array1 = array('Name', 'Code', 'Email');
$array2 = array(
array('user1', '12345', 'user1@example.com'),
array('user2', '12345', 'user2@example.com'),
array('user3', '12345', 'user3@example.com'),
array('user4', '12345', 'user4@example.com'),
array('user5', '12345', 'user5@example.com'),
array('user6', '12345', 'user6@example.com')
);
$results = array_map(function ($n) use($array1) {
return array_combine($array1, $n);
}, $array2 );
echo "<pre>";
print_r( $results );
echo "</pre>";
This will result to:
Array
(
[0] => Array
(
[Name] => user1
[Code] => 12345
[Email] => user1@example.com
)
[1] => Array
(
[Name] => user2
[Code] => 12345
[Email] => user2@example.com
)
[2] => Array
(
[Name] => user3
[Code] => 12345
[Email] => user3@example.com
)
[3] => Array
(
[Name] => user4
[Code] => 12345
[Email] => user4@example.com
)
[4] => Array
(
[Name] => user5
[Code] => 12345
[Email] => user5@example.com
)
[5] => Array
(
[Name] => user6
[Code] => 12345
[Email] => user6@example.com
)
)
Doc: array_map, array_combine
You can modify the existing $array2
:
array_walk($array2, function(&$v, $k, $array) {
$v = array_combine($array, $v);
}, $array1);
sorry but you cant use the same key twice in the same array!
in this case you can simple use something like this
<?php
$arr = [
'user1', '12345', 'user1@example.com',
'user2', '12345', 'user2@example.com',
'user3', '12345', 'user3@example.com',
'user4', '12345', 'user4@example.com',
'user5', '12345', 'user5@example.com',
'user6', '12345', 'user6@example.com'
];
$arr2 = [];
for ($i=0;$i<sizeof($arr);$i++) {
if($i % 3 == 0){
array_push($arr2, ['name' => $arr[$i], 'code' => $arr[$i+1], 'email' => $arr[$i+2]]);
}
}
print_r($arr2);
?>
its gonna result something like this:
Array
(
[0] => Array
(
[name] => user1
[code] => 12345
[email] => user1@example.com
)
[1] => Array
(
[name] => user2
[code] => 12345
[email] => user2@example.com
)
[2] => Array
(
[name] => user3
[code] => 12345
[email] => user3@example.com
)
[3] => Array
(
[name] => user4
[code] => 12345
[email] => user4@example.com
)
[4] => Array
(
[name] => user5
[code] => 12345
[email] => user5@example.com
)
[5] => Array
(
[name] => user6
[code] => 12345
[email] => user6@example.com
)
)