Php 如果找到重复的其他值键,则对值进行分组
Php grouping values if find duplicate other value key
我在查询提取的 while 循环中有这个
如果在前缀键
中找到出现,我想重新组合值
while(($arr = $_opDB->fetch_assoc($result)) != FALSE){
if(!array_search($arr['base_name'], array_column($translate_array, 'connector_prefix'))){
$translate_array[] = array(
'prefix' => $arr['base_name'],
'translate_hostname' => $arr['translate_hostname']
);
} else {
$translate_array[$i-1]['translate_hostname'][] = $arr['translate_hostname'];
}
$i++;
}
...
Array
(
...
[3] => Array
(
[prefix] => DD
[translate_hostname] => dd
)
[4] => Array
(
[prefix] => DD
[translate_hostname] => de
)
)
如果前缀与前一个循环相同,那么将数组添加到前一个 'translate_hostname' 中,这样
[3] => Array
(
[prefix] => DD
[translate_hostname] =>
[0] => Array
(
[translate] => dd
)
[1] => Array
(
[translate] => de
)
)
但是不行,谢谢帮助
如果我理解正确,您需要在同一行中保留具有相同 base_name
的相同记录,并转换 translate_hostname
的键
到具有两个值的数组
我们可以做到
对所有记录进行 1 次循环
2 组记录 base_name
通过使用
isset()
检查第一个有此 basename
的记录或将此记录添加到组
3-如果不是第一条记录检查是否
存在的 translate_hostname
是否为数组 if not convert
它到一个数组并将第一个值和当前循环添加到它
行值
代码:-
while(($arr = $_opDB->fetch_assoc($result)) != FALSE){
if(!isset($translate_array[$arr['base_name']]))
{
$translate_array[$arr['base_name']] = array(
'prefix' => $arr['base_name'],
'translate_hostname' => $arr['translate_hostname']
);
}else {
$translate_hotnames = $translate_array[$arr['base_name']]["translate_hostname"];
if(!is_array($translate_hotnames)){
$translate_hotnames = [$translate_hotnames];
$translate_hotnames[] = $arr['translate_hostname'];
}
else {
$translate_hotnames[] = $arr['translate_hostname'];
}
$translate_array[$arr['base_name']]["translate_hostname"] = $translate_hotnames;
}
}
这将导致以下结果“关联”数组分组:
array(1) {
["DD"]=>
array(2) {
["prefix"]=>
string(2) "DD"
["translate_hostname"]=>
array(2) {
[0]=>
string(2) "dd"
[1]=>
string(2) "de"
}
}
}
要将其检索为提到的结果“索引”数组,您可以使用 array_values()
通过在循环后添加以下行
$translate_array = array_values($translate_array)
结果将是:-
array(1) {
[0]=>
array(2) {
["prefix"]=>
string(2) "DD"
["translate_hostname"]=>
array(2) {
[0]=>
string(2) "dd"
[1]=>
string(2) "de"
}
}
}
我在查询提取的 while 循环中有这个 如果在前缀键
中找到出现,我想重新组合值while(($arr = $_opDB->fetch_assoc($result)) != FALSE){
if(!array_search($arr['base_name'], array_column($translate_array, 'connector_prefix'))){
$translate_array[] = array(
'prefix' => $arr['base_name'],
'translate_hostname' => $arr['translate_hostname']
);
} else {
$translate_array[$i-1]['translate_hostname'][] = $arr['translate_hostname'];
}
$i++;
}
...
Array
(
...
[3] => Array
(
[prefix] => DD
[translate_hostname] => dd
)
[4] => Array
(
[prefix] => DD
[translate_hostname] => de
)
)
如果前缀与前一个循环相同,那么将数组添加到前一个 'translate_hostname' 中,这样
[3] => Array
(
[prefix] => DD
[translate_hostname] =>
[0] => Array
(
[translate] => dd
)
[1] => Array
(
[translate] => de
)
)
但是不行,谢谢帮助
如果我理解正确,您需要在同一行中保留具有相同 base_name
的相同记录,并转换 translate_hostname
的键
到具有两个值的数组
我们可以做到
对所有记录进行 1 次循环
2 组记录 base_name
通过使用
isset()
检查第一个有此 basename
的记录或将此记录添加到组
3-如果不是第一条记录检查是否
存在的 translate_hostname
是否为数组 if not convert
它到一个数组并将第一个值和当前循环添加到它
行值
代码:-
while(($arr = $_opDB->fetch_assoc($result)) != FALSE){
if(!isset($translate_array[$arr['base_name']]))
{
$translate_array[$arr['base_name']] = array(
'prefix' => $arr['base_name'],
'translate_hostname' => $arr['translate_hostname']
);
}else {
$translate_hotnames = $translate_array[$arr['base_name']]["translate_hostname"];
if(!is_array($translate_hotnames)){
$translate_hotnames = [$translate_hotnames];
$translate_hotnames[] = $arr['translate_hostname'];
}
else {
$translate_hotnames[] = $arr['translate_hostname'];
}
$translate_array[$arr['base_name']]["translate_hostname"] = $translate_hotnames;
}
}
这将导致以下结果“关联”数组分组:
array(1) {
["DD"]=>
array(2) {
["prefix"]=>
string(2) "DD"
["translate_hostname"]=>
array(2) {
[0]=>
string(2) "dd"
[1]=>
string(2) "de"
}
}
}
要将其检索为提到的结果“索引”数组,您可以使用 array_values()
通过在循环后添加以下行
$translate_array = array_values($translate_array)
结果将是:-
array(1) {
[0]=>
array(2) {
["prefix"]=>
string(2) "DD"
["translate_hostname"]=>
array(2) {
[0]=>
string(2) "dd"
[1]=>
string(2) "de"
}
} }