我可能[超]超過這個。我試圖分析數組[1,9],[4,6] [5,5],[6,4],[9,1]和重複數字(我有一個超級腦放屁,甚至無法記住像這樣的數字這個詞)刪除(最後兩個),以便只打印[1,9],[4,6] [5,5]。PHP:從數組中取出重複的數字然後將它們打印出來
我在想,把這個數組變成一個字符串,並使用preg_match,但我敢肯定,即使我有正確的正則表達式這不會工作。
我可能[超]超過這個。我試圖分析數組[1,9],[4,6] [5,5],[6,4],[9,1]和重複數字(我有一個超級腦放屁,甚至無法記住像這樣的數字這個詞)刪除(最後兩個),以便只打印[1,9],[4,6] [5,5]。PHP:從數組中取出重複的數字然後將它們打印出來
我在想,把這個數組變成一個字符串,並使用preg_match,但我敢肯定,即使我有正確的正則表達式這不會工作。
它看起來像元素是對稱分佈的。
我們可以減少陣列中的兩半,並與array_slice()
只得到上半場:
$array = array(
array(1,9),
array(4,6),
array(5,5),
array(6,4),
array(9,1),
);
print_r(array_slice($array, 0, ceil(count($array)/2)));
結果:
Array(
[0] => Array(
[0] => 1
[1] => 9
)
[1] => Array(
[0] => 4
[1] => 6
)
[2] => Array(
[0] => 5
[1] => 5
)
)
ceil()
用於將數字四捨五入到下一個最高整數,如果數組中有偶數個項目。例如:如果數組中有3個項目,則5/2
將返回2.5
,我們需要3個項目,因此我們使用ceil(2.5)
,它給出3
。
與3項示例:
$array = array(
array(1,9),
array(5,5),
array(9,1),
);
print_r(array_slice($array, 0, ceil(count($array)/2)));
結果:
Array(
[0] => Array(
[0] => 1
[1] => 9
)
[1] => Array(
[0] => 5
[1] => 5
)
)
與4項示例:
$array = array(
array(1,9),
array(7,7),
array(7,7),
array(9,1),
);
print_r(array_slice($array, 0, ceil(count($array)/2)));
結果:
Array(
[0] => Array(
[0] => 1
[1] => 9
)
[1] => Array(
[0] => 7
[1] => 7
)
)
如果我在理解你想要做的事情時是正確的,你想從數組中刪除最後2個元素?
在PHP中有一個函數array_pop,它從數組中刪除最後一個元素。
$array = array_pop($array);
所以如果你運行這兩次,你會從數組中刪除最後2個元素。
你理解錯誤的問題...... –
不......即使這兩個元素*發生*是重複的,op真的要刪除*重複*,而不是最後兩個條目。 –
是的,我希望它是那麼簡單的T-T。 –
這是我會做(我希望我我得太多沒有這個:))
$stringArray = array();
$stringArray[] = '1,9';
$stringArray[] = '4,6';
$stringArray[] = '5,5';
$stringArray[] = '6,4';
$stringArray[] = '9,1';
foreach($stringArray as &$numString) {
$numString = explode(',', $numString);
usort($numString, function($a, $b) {return $a - $b;});
$numString = implode(',', $numString);
}
$a = array_unique($a);
print_r($a);
你基本上每個元素爆發成一個子陣,排序,然後爆了回去。在調用array_unique
之後,您將在數組中留下唯一的值。
輸出將
Array
(
[0] => 1,9
[1] => 4,6
[2] => 5,5
)
你建議治療[A,B]等同於[B,A]這使得問題複雜得多的結果。下面的代碼給你要的結果,但並沒有真正理解這個問題是什麼,你正在試圖修復和[1,9]是否等效於溶液中的[9,1]:
$a=array(array(1,9),array(4,6),...
$dup=array();
for ($i=0; $i<count($a) -1; $i++) {
for ($j=$i+1; $j<count($a); $j++) {
if (($a[$i][0]==$a[$j[0] && $a[$i][1]==$a[$j[1])
|| ($a[$i][0]==$a[$j[1] && $a[$i][1]==$a[$j[0])) {
$dup[]=$j;
}
}
}
foreach ($dup as $i) {
unset($a[$i]);
}
如果你對這樣的數組:
$x = array(
array(1,9),
array(4,6),
array(5,5),
array(6,4),
array(9,1)
);
這裏是獲得唯一對一個辦法:
foreach ($x as $pair) {
sort($pair);
$unique_pairs[implode(',', $pair)] = $pair;
}
此使用每個分類對作爲新數組的鍵的字符串表示,所以結果w根據定義,病人有不同的價值。
至於你的問題打印出來一部分,一旦你有獨特的價值,你可以遍歷他們並打印出來在你喜歡的任何格式,例如:
foreach ($unique_pairs as $pair) { vprintf("[%d,%d]<br>", $pair); }
這是更清潔,然後重型其他答案。 –
所以我m實際上會假設你的問題與其他人有不同的意義。我相信你問的是:
如何篩選出已使用項目反轉的數組項目?
<?php
// The example set you gave
$numberSets = [[1, 9], [4, 6], [5, 5], [6, 4], [9, 1]];
// Initialize an empty array to keep track of what we've seen
$keys = [];
// We use array filter to get rid of items we don't want
// (Notice that we use & on $keys, so that we can update the variable in the global scope)
$numberSets = array_filter($numberSets, function($set) use(&$keys) {
// Reverse the array
$set = array_reverse($set);
// Create a string of the items
$key = implode('', $set);
// Get the reverse of the numbers
$reversedKey = strrev($key);
// If the palindrome of our string was used, return false to filter
if (isset($keys[$reversedKey])) {
return false;
}
// Set the key so it's not used again
// Since $keys is being passed by reference it is updated in global scope
$keys[$key] = true;
// Return true to NOT filter this item, since it or it's reverse were not matched
return true;
});
var_dump($numberSets);
如果你總是有這個順序的項目,你可以採取數組的前半部+1。你在考慮* palindrom *嗎? –
'unset(sizeof($ array));'? – Derek
輸入是靜態的嗎?它會一直有5件物品嗎? –