这是我的基本数组:
Array (
[1] => array
(
[name] => Name1
[midname] => MidN1
[lastname] => LastN1
[email] => email_1@email1.com
)
[2] => array
(
[name] => Name2
[midname] => MidN2
[lastname] => LastN2
[email] => email_1@email1.com
)
[3] => array
(
[name] => Name1
[midname] => MidN1
[lastname] => LastN1
[email] => email_2@email2.com
)
)
正如您所看到的,在某些情况下我的名字和电子邮件是相同的,我们的想法是只显示一个数组如下
[1] => array
(
[name] => Name1
[midname] => MidN1
[lastname] => LastN1
[email] => email_1@email1.com
)
[3] => array
(
[name] => Name1
[midname] => MidN1
[lastname] => LastN1
[email] => email_2@email2.com
)
因为你可以看到名称是相同的但是电子邮件是不同的,所以这是想要从不同的电子邮件中获取所有信息,现在,问题是存储名称,中间名,姓氏和电子邮件在单个列中作为json数组: 所以首先我:
$q = "SELECT * FROM table";
$r=$con->query($q);
$res = mysqli_fetch_array($r);
$arrs = json_decode($res);
print_r($arrs);
这就是我得到数组的方式......并且它们以html显示为:
Name1 MidN1 LastN1 email_1@email1.com
Name2 MidN2 LastN2 email_1@email1.com
Name1 MidN1 LastN1 email_2@email2.com
这个想法只是为了得到:
Name1 MidN1 LastN1 email_1@email1.com
Name1 MidN1 LastN1 email_2@email2.com
我尝试使用array_unique($ array);但是返回空和array_unique($ array,SORT_REGULAR);将输出整个事物,[1] => array()...是行中的ID ...
感谢您抽出宝贵时间。
答案 0 :(得分:0)
我编辑了我的答案。 你可以像这样迭代你的Json结果:
$my_array = array();
foreach ($arrs as $key => $value) {
if (!in_array($value['email'], $my_array)){
$my_array[] = $value['email'];
}
}
但是我想知道为什么在数据库字段中存储Json字符串而不是每个属性使用一个字段......
答案 1 :(得分:0)
如果您无法更改表定义或查询,请使用快速解决方案: 1)创建一个数组,其中名字,中间名和姓氏是主键 (问题是两个John Junior Smith)
$arr= array (
'1' => array
(
'name' => 'Name1',
'midname' => 'MidN1',
'lastname' => 'LastN1',
'email' => 'email_1@email1.com'
),
'2' => array
(
'name' => 'Name2',
'midname' => 'MidN2',
'lastname' => 'LastN2',
'email' => 'email_1@email1.com'
),
'3' => array
(
'name' => 'Name1',
'midname' => 'MidN1',
'lastname' => 'LastN1',
'email' => 'email_2@email2.com'
)
);
$people = array();
foreach($arr as $v){
$people[$v['name'].' '.$v['name'].' '.$v['name']][] = $v['email'];
}
ksort($people); // if it is not ordered by mysql
echo '<table border="1">';
foreach( $people as $k => $val){
echo "<tr><td>$k</td><td>";
foreach($val as $email){
echo $email.'<br>';
}
echo '</td></tr>';
}
echo '</table>';
另一种解决方案是使用usort来定义排序标准。