Php 合并多维数组中的重复数组值php
Php merge duplicate array values in a multidimensional array php
你好,在我尝试如何从 link merge duplicate array values in a multidimensional array php
的多维数组中合并重复值之前
但该答案仅适用于两个重复值,不适用于两个以上的相同值。因此,如果我像这样更改此代码:
$arr = array( array('id'=>1, 'email_id'=>'ok@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>3, 'email_id'=>'an@gmail.com', 'password'=>'pass'));
$new_arr = array();
foreach($arr as $k => $v) {
if( is_array($arr[$k+1]) && $arr[$k]['password'] === $arr[$k + 1]['password'] )
$new_arr[] = array($arr[$k], $arr[$k+1]);
else if( in_array_recursive($arr[$k]['password'], $new_arr) === FALSE )
$new_arr[] = $v;
}
function in_array_recursive( $val, $arr) {
foreach( $arr as $v ) {
foreach($v as $m) {
if( in_array($val, $m ) )
return TRUE;
}
}
return FALSE;
}
echo "<pre>";
print_r($arr);
echo "</pre>";
echo "<pre>";
print_r($new_arr);
echo "</pre>";
我得到这样的结果:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[email_id] => ok@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[1] => Array
(
[0] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[2] => Array
(
[id] => 3
[email_id] => an@gmail.com
[password] => pass
)
)
这不是答案:(,我想要的结果是这样的:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[email_id] => ok@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
[2] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[1] => Array
(
[id] => 3
[email_id] => an@gmail.com
[password] => pass
)
)
你可以试试这个,但它会添加额外的密钥(测试、通过等),但我认为这没有任何问题
<?php
$arr = array( array('id'=>1, 'email_id'=>'ok@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>3, 'email_id'=>'an@gmail.com', 'password'=>'pass'));
echo "<pre>";
print_r($arr);
foreach($arr as $k => $v) {
$new_arr[$v['password']][]=$v;
}
print_r($new_arr);
echo "</pre>";
输出:
Array
(
[test] => Array
(
[0] => Array
(
[id] => 1
[email_id] => ok@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
[2] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[pass] => Array
(
[0] => Array
(
[id] => 3
[email_id] => an@gmail.com
[password] => pass
)
)
)
你好,在我尝试如何从 link merge duplicate array values in a multidimensional array php
的多维数组中合并重复值之前但该答案仅适用于两个重复值,不适用于两个以上的相同值。因此,如果我像这样更改此代码:
$arr = array( array('id'=>1, 'email_id'=>'ok@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>3, 'email_id'=>'an@gmail.com', 'password'=>'pass'));
$new_arr = array();
foreach($arr as $k => $v) {
if( is_array($arr[$k+1]) && $arr[$k]['password'] === $arr[$k + 1]['password'] )
$new_arr[] = array($arr[$k], $arr[$k+1]);
else if( in_array_recursive($arr[$k]['password'], $new_arr) === FALSE )
$new_arr[] = $v;
}
function in_array_recursive( $val, $arr) {
foreach( $arr as $v ) {
foreach($v as $m) {
if( in_array($val, $m ) )
return TRUE;
}
}
return FALSE;
}
echo "<pre>";
print_r($arr);
echo "</pre>";
echo "<pre>";
print_r($new_arr);
echo "</pre>";
我得到这样的结果:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[email_id] => ok@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[1] => Array
(
[0] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[2] => Array
(
[id] => 3
[email_id] => an@gmail.com
[password] => pass
)
)
这不是答案:(,我想要的结果是这样的:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[email_id] => ok@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
[2] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[1] => Array
(
[id] => 3
[email_id] => an@gmail.com
[password] => pass
)
)
你可以试试这个,但它会添加额外的密钥(测试、通过等),但我认为这没有任何问题
<?php
$arr = array( array('id'=>1, 'email_id'=>'ok@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>2, 'email_id'=>'check@gmail.com', 'password'=>'test'),
array('id'=>3, 'email_id'=>'an@gmail.com', 'password'=>'pass'));
echo "<pre>";
print_r($arr);
foreach($arr as $k => $v) {
$new_arr[$v['password']][]=$v;
}
print_r($new_arr);
echo "</pre>";
输出:
Array
(
[test] => Array
(
[0] => Array
(
[id] => 1
[email_id] => ok@gmail.com
[password] => test
)
[1] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
[2] => Array
(
[id] => 2
[email_id] => check@gmail.com
[password] => test
)
)
[pass] => Array
(
[0] => Array
(
[id] => 3
[email_id] => an@gmail.com
[password] => pass
)
)
)