我有一個帶有數字的多維陣列。我想檢查每個陣列的其余部分,如果它與任何陣列有超過 1 個數字匹配,則洗掉并推送數字以分隔陣列以保存所有數字。
在示例
Array[0]中具有 1 和 5 相同,Array[2]
然后我將值發送(1,2,3,4,5)到Array[0]陣列$removedNumbers()并取消設定。
也Array[1]有兩個搭配Array[3]。
結論:Array[0]andArray[1]將被洗掉,所有值都轉到removedNumbers().
我的原始陣列有 400 個子陣列,由于某種原因它沒有處理到最后,所以我使用回圈來繼續完成這項作業。我還注意到$removedNumbers()陣列中丟失的數字。
任何想法來修復或改進它?
for ($i = 0; $i < count($MyArray); $i ) {
$n = $i 1;
while ($n < count($MyArray)) {
$match = count(array_intersect($MyArray[$i], $MyArray[$n]));
if ($match > 1) {
for ($k = 0; $k < 5; $k ) {
array_push($removedNumbers, $MyArray[$i][$k]);
}
unset($allTickets[$i]);
$MyArray = array_values($MyArray);
break;
}
$n ;
}
}
樣本資料$MyArray:
[
[1,2,3,4,5],
[1,6,7,8,9],
[1,5,6,10,11],
[6,12,13,14,15]
]
uj5u.com熱心網友回復:
在資料集上回圈以創建一組元素,其中包含其所在位置的索引。
再次在資料集上回圈以檢查集合中每個元素的計數。如果它大于 1,則意味著它存在于超過 1 個子陣列中。如果此類公共元素的計數大于 1,則將它們添加到
removedNumbers當前陣列并從當前陣列中取消設定。
片段:
<?php
$set = [];
foreach($d as $idx => $val){
foreach($val as $v){
$set[ $v ][ $idx ] = true;
}
}
$removedNumbers = [];
foreach($d as $idx => $val){
$commonElements = 0;
foreach($val as $v){
if(count($set[ $v ]) > 1){
$commonElements ;
unset($set[ $v ][ $idx ]);
}
}
if($commonElements > 1){
unset($d[ $idx ]);
$removedNumbers = array_merge($removedNumbers, $val);
}
}
在線演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514920.html
