Php 如何循环数组并显示唯一键X和concat值Y
所以我需要循环一个数组,并在引用中显示唯一的键IdTransferFile和concat 通过上面的代码,我得到了以下结果: 差异 删除传输文件:1,参考:[46] 差异 删除传输文件:2,参考:[46] 差异 相同的 相同的 删除传输文件:3,参考:[464747]Php 如何循环数组并显示唯一键X和concat值Y,php,Php,所以我需要循环一个数组,并在引用中显示唯一的键IdTransferFile和concat 通过上面的代码,我得到了以下结果: 差异 删除传输文件:1,参考:[46] 差异 删除传输文件:2,参考:[46] 差异 相同的 相同的 删除传输文件:3,参考:[464747] 排列 ( [0]=>阵列 ( [IdTransferFile]=>1 [参考]=>46 ) [1] =>阵列 ( [IdTransferFile]=>2 [参考]=>46 ) [2] =>阵列 ( [IdTransferFile
排列
(
[0]=>阵列
(
[IdTransferFile]=>1
[参考]=>46
)
[1] =>阵列
(
[IdTransferFile]=>2
[参考]=>46
)
[2] =>阵列
(
[IdTransferFile]=>3
[参考]=>46
)
[3] =>阵列
(
[IdTransferFile]=>3
[参考]=>47
)
[4] =>阵列
(
[IdTransferFile]=>3
[参考]=>47
)
[5] =>阵列
(
[IdTransferFile]=>4
[参考]=>47
)
)
如果($item[“IdTransferFile”]==$pastTransferFile){
回显“相同”。
;
如果($item[“Reference”]!=$passreference){
$referenceText.=$item[“Reference”]
}
}否则{
如果($pastTransferFile!=0){
echo(“删除传输文件:“.$pastTransferFile.”,引用:[“$pastReferenceText.”]”“
”;
}
$pastReferenceText=$transferFileText=“”;
$transferFileText.=$item[“IdTransferFile”];
回声“diff”。
;
}
$pastTransferFile=$item[“IdTransferFile”];
$pastReference=$item[“Reference”];
$pastReferenceText.=$pastReference;
我希望代表每次转让删除的参考:
删除传输文件:1,参考:[46]
删除传输文件:2,参考:[46]
删除传输文件:3,参考:[46,47]
谢谢我第一次尝试回答关于SO的问题,所以这可能不是最聪明的方式,但我相当有信心它能完成任务
$items = array (
0 => array (
'id' => 1,
'ref' => 46
),
1 => array (
'id' => 2,
'ref' => 46
),
2 => array (
'id' => 3,
'ref' => 46
),
3 => array (
'id' => 3,
'ref' => 47
),
4 => array (
'id' => 3,
'ref' => 47
),
5 => array (
'id' => 4,
'ref' => 47
)
);
// unique id array
$uIdArr = array();
// loop through items
foreach($items as $item) {
// pass ids to unique id array
$uIdArr[] = $item['id'];
};
// trim unique id array (remove duplicates), and make the id the key
$uIdArr = array_unique($uIdArr);
$uIdArr = array_flip($uIdArr);
// create array to hold ref for each unique id
$uIdArr = array_map(function() { return array(); }, $uIdArr);
// for each ref
foreach($items as $key => $item) {
// pass ref to corrosponding id
array_push($uIdArr[$item['id']], $item['ref']);
// var_export($uIdArr[$item['id']]);
};
// loop through unique id array and output the desired outcome
foreach($uIdArr as $id => $ref) {
// $refString = implode(", ",$ref);
$refString = implode(", ",array_unique($ref));
echo $output = "Delete transfer file : ".$id.", Reference : [".$refString."]\n";
};
// Output
// Delete transfer file : 1, Reference : [46]
// Delete transfer file : 2, Reference : [46]
// Delete transfer file : 3, Reference : [46,47]
// Delete transfer file : 4, Reference : [47]
// var_export($uIdArr);
我很高兴有任何改进建议,谢谢。谢谢你的帮助,但我找到了方法。 都在同一个地方 再次感谢,晚安
foreach($marks as $k => $item) {
//deletes
if ($pastTransferFile == 0) {
$pastReference = $item["Reference"];
$pastTransferFile = $item["IdTransferFile"];
} else {
if ($item["IdTransferFile"] == $pastTransferFile) {
if ($item["Reference"] != $pastReferenceValue) {
$pastReference .= $item["Reference"] . ", ";
$pastReferenceValue = $item["Reference"];
}
$pastTransferFile = $item["IdTransferFile"];
} else {
$text = "Delete transfer file : ".$pastTransferFile.", Reference : [". $pastReference."]";
echo (str_replace(", ]","]",$text));
$pastTransferFile = $item["IdTransferFile"];
$pastReference = $item["Reference"].", ";
$pastReferenceValue = $item["Reference"];
}
}
}
谢谢,但是我找到了方法,但是是的,很好的选择