簡體   English   中英

對值進行分組並將索引存儲為逗號分隔值

[英]Group values and store indexes of as comma-separated values

我有以下數組:

Array
(
    [0] => 1
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [8] => 9
    [9] => 9
    [10] => 10
)

在上面的示例中,有各種重復的數字。

我希望 output 如下:

 Array
    (
        [0] => 0,1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
        [5] => 6
        [6] => 7
        [7] => 8,9
        [8] => 10

    )

我希望能夠創建一個新數組並將原始數組中的鍵顯示為第二個數組中的值。 這意味着 0 和 1 共享相同的值,而 8 和 9 也共享相同的值。

更新:

我使用了以下問題,但我沒有成功實現我想要的,因為我的是一個平面陣列。 我找到的答案只涉及多維 arrays。

首先,您應該組織一個我稱為$metaArray的中間數組:

$array = [1, 1, 2, 3, 4, 5, 6, 7, 9, 9, 10];
$metaArray = array();  
foreach( $array as $key => $value ){
    if (!isset($metaArray[$value])) {
        $metaArray[$value] = $key;
    } else {
        $metaArray[$value] .= ",$key";
    }
}

你得到一個這樣的數組:

Array
(
    [1] => 0,1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 7
    [9] => 8,9
    [10] => 10
)

$metaArray中,您將值作為鍵,並且作為值,將原始數組的鍵與該值關聯。 然后,如果你想生成准確的 output,你應該把你的元素放在你的$results中:

$result = array();
foreach( $metaArray as $key => $value ){
  array_push($result, (string)$value);    
}

print_r($result);

您將獲得以下內容,其中所有值都是字符串,而不是數據類型的混合:

Array
(
    [0] => 0,1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8,9
    [8] => 10
)

替代解決方案:如果您不需要將所有數據都作為字符串,請使用mickmausa建議的解決方案來計算$result ,所以:

$result = array_values($metaArray);

您需要迭代循環並檢查您是否正在處理給定值的第一次出現。 如果是這樣,只需將新的鍵控元素推送到結果集中。 如果不是,請使用連接 append 將新值連接到相應鍵處的舊值。

代碼:(演示

$array = [1, 1, 2, 3, 4, 5, 6, 7, 9, 9, 10];

$result = [];
foreach ($array as $index => $value) {
    if (!isset($result[$value])) {
        $result[$value] = $index;
    } else {
        $result[$value] .= ",$index";
    }
}
var_export(array_values($result));

*如果有人發現此基本任務的重復項,我將很樂意撤回此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM