簡體   English   中英

如何合並這兩個數組?

[英]How to merge these two arrays?

如何合並這兩個數組...

$arr1 = array(
    [0] => 'boofoo',
    [1] => '2'
);

$arr2 = array(
    [0] => 'fbfb',
    [1] => '6'
);

得到第三個數組如下:

$arr3 = array(
    [0] => 'boofoo',
    [1] => '6'
);

即,保留較長的字符串和較高的數值。

如果兩個數組具有相同的鍵,則可以執行簡單的foreach並根據分別與>strlen有關的關系來選擇更好的值:

$arr3 = array();
foreach ($arr1 as $key => $val) {
    if (array_key_exists($key, $arr2)) {
        if (is_numeric($val)) {
            $arr3[$key] = max($val, $arr2[$key]);
        } else {
            $arr3[$key] = strlen($val) > strlen($arr2[$key]) ? $val : $arr2[$key];
        }
    }
}

在您問: expr1 ? expr2 : expr3 expr1 ? expr2 : expr3是條件運算符 ,其中基於expr1的返回值對表達式expr2expr3進行求expr1 因此,如果strlen($val) > strlen($arr2[$key])為true,則條件運算的結果$val ,否則$arr2[$key]

我認為您可以通過http://www.php.net/manual/en/function.array-walk.php來實現。

我會嘗試為此編寫一些測試並更新帖子。

PS: array_map更好(也許步行甚至不行嗎?)

<?php

function combine($arr1, $arr2) {
    return array_map("callback", $arr1, $arr2);
}

function callback($item, &$item2) {
    if (is_numeric($item)) {
        return max($item, $item2);
    }
    if (strlen($item2) > strlen($item)) {
        return $item2;
    }
    return $item;
}

class Tests  extends PHPUnit_Framework_TestCase {
    public function testMergingArrays() {
        $arr1 = array(
            'boofoo',
            '2'
        );

        $arr2 = array(
            'fbfb',
            '6'
        );

        $arr3 = array(
            'boofoo',
            '6'
        );

        $this->assertEquals($arr3, combine($arr1, $arr2));
    }
}

我已經進行了測試,現在可以重構它了。 但是這種實現確實有效。

您可以使用array_merge()函數,然后再進行sort()

暫無
暫無

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

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