我在处理数组PHP时遇到问题,我有一个数组:
[0] {
'email' => 'test@gmail.com',
'meta' => {
'product' => {
'id' => '1',
'content' => 'This is content'
}
}
}
[1] {
'email' => 'test2@gmail.com',
'meta' => {
'product' => {
'id' => '2',
'content' => 'This is content'
}
}
}
[2] {
'email' => 'test2@gmail.com',
'meta' => {
'product' => {
'id' => '3',
'content' => 'This is content'
}
}
}
我需要按值'email'
合并这个数组,如下所示:
[0] {
'email' => 'test@gmail.com',
'meta' => {
'product' => {
'id' => '1',
'content' => 'This is content'
}
}
}
[1] {
'email' => 'test2@gmail.com',
'meta' => {
'product' => [0] {
'id' => '2',
'content' => 'This is content'
}
[1] {
'id' => '3',
'content' => 'This is content'
}
}
}
有人可以帮助我吗?
$sorted_array = [];
$emails = [];
$i = 0;
foreach ($arr as $array) {
if(!empty($array['email']) && !empty($array['meta']['product'])){
if( in_array($array['email'], $emails)){
$i--;
} else {
$emails[] = $array['email'];
}
$sorted_array[$i]['email'] = $array['email'];
$sorted_array[$i]['meta']['product'][] = $array['meta']['product'];
$i++;
}
}
echo "<pre>";
print_r($sorted_array);
希望这对你有帮助
Php 有许多函数来对数组进行排序。您可以查阅文档以根据您的案例 http://php.net/manual/en/array.sorting.php 选择更好的算法。您可以将结果数组与array_merge函数合并,如下所示:
array_merge($a 1,$a 2)
我在这里为您的代码创建了一个示例:
http://codepad.org/zzkndGQZ
您可以使用
电子邮件像数组的键一样,结束,使用array_combine从0到N个数字...
<?php
$oldArray = array(
array(
'email' => 'test@gmail.com',
'meta' => array(
'product' => array(
'id' => '1',
'content' => 'This is content'
)
)
), array(
'email' => 'test2@gmail.com',
'meta' => array(
'product' => array(
'id' => '2',
'content' => 'This is content'
)
)
), array(
'email' => 'test2@gmail.com',
'meta' => array(
'product' => array(
'id' => '3',
'content' => 'This is content'
)
)
)
);
$newArray = array();
foreach($oldArray as $element){
if(isset($newArray[$element['email']])) {
if(!isset($newArray[$element['email']]['meta']['product'][0]))
$newArray[$element['email']]['meta']['product'] = array($newArray[$element['email']]['meta']['product']);
$newArray[$element['email']]['meta']['product'][] = $element['meta']['product'];
} else {
$newArray[$element['email']] = $element;
}
}
//For index since 0 to n
print_r(array_combine(range(0,count($newArray)-1), $newArray));
您可以使用排序的信息构建一个新数组。
它应该使用这样的东西,但未经测试:
$sorted_array = [];
$i = 0;
foreach ($unsorted_array as $array) {
if(!empty($array['email']) && !empty($array['meta']['product'])){
$sorted_array[$i]['email'] = $array['email'];
$sorted_array[$i]['meta']['product'][] = $array['meta']['product'];
$i++;
}
}
print_r($sorted_array);