php將一個二維數組按照某個字段值合並成一維數組,如果有重復則將重復的合並成二維數組
阿新 • • 發佈:2017-09-05
字段 轉載 () num 精簡 val 特定 數組 brush
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
最近工作中碰到一個問題,用PHP將一個二維數組按照二維數組中的各個項中的某個特定字段值合並成一維數組,如果有重復則將重復的合並成二維數組,生成的二維數組的第一維的鍵是特定字段的值,二維的鍵可以是隨機索引,也可以是其中的另一個字段的值。其實這個需求經常會在工作中碰到,只是碰到的時候一個有重復的就直接用之前的覆蓋後面的或者用之後的覆蓋之前的,這樣很容易就可以處理了。很少碰到這種有一維數組又有二維數組的情況,先上代碼:
$a = array( 0 => array(‘target_id‘ => ‘22‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘15261‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 1 => array(‘target_id‘ => ‘22‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘2‘, ‘extension_number‘ => ‘66002‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => ‘1‘,), 14 => array(‘target_id‘ => ‘22‘, ‘target_type‘ => ‘1‘,‘phone_type‘ => ‘4‘, ‘extension_number‘ => ‘56431‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 2 => array(‘target_id‘ => ‘24‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘54876‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => ‘1‘,), 3 => array(‘target_id‘ => ‘25‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘07143‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 13 => array(‘target_id‘ => ‘24‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘0‘, ‘extension_number‘ => ‘96949‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 4 => array(‘target_id‘ => ‘26‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘94755‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 5 => array(‘target_id‘ => ‘30‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘14171‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 6 => array(‘target_id‘ => ‘36‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘54876‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => ‘1‘,), 7 => array(‘target_id‘ => ‘42‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘31354‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 8 => array(‘target_id‘ => ‘43‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘66810‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 9 => array(‘target_id‘ => ‘45‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘34868‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 10 => array(‘target_id‘ => ‘50‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘79523‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 11 => array(‘target_id‘ => ‘149‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘59438‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 12 => array(‘target_id‘ => ‘806‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘14780‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), ); $target = array(); $temp = array(); foreach ($a as $val) { if (!empty($target)) { if (in_array($val[‘target_id‘], array_keys($target))) { if (!empty($temp[$val[‘target_id‘]])) { $target[$val[‘target_id‘]] = null; $target[$val[‘target_id‘]][$temp[$val[‘target_id‘]][‘phone_type‘]] = $temp[$val[‘target_id‘]]; $temp[$val[‘target_id‘]] = null; } $target[$val[‘target_id‘]][$val[‘phone_type‘]] = $val; } else { $temp[$val[‘target_id‘]] = $val; $target[$val[‘target_id‘]] = $val; } } else { $temp[$val[‘target_id‘]] = $val; $target[$val[‘target_id‘]] = $val; } } var_dump($target);exit;
這個返回的結果形如:
array 22 => array 1 => array ‘target_id‘ => string ‘22‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘15261‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 2 => array ‘target_id‘ => string ‘22‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘2‘ (length=1) ‘extension_number‘ => string ‘66002‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => string ‘1‘ (length=1) 4 => array ‘target_id‘ => string ‘22‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘4‘ (length=1) ‘extension_number‘ => string ‘56431‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 24 => array 1 => array ‘target_id‘ => string ‘24‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘54876‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => string ‘1‘ (length=1) 0 => array ‘target_id‘ => string ‘24‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘0‘ (length=1) ‘extension_number‘ => string ‘96949‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 25 => array ‘target_id‘ => string ‘25‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘07143‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 26 => array ‘target_id‘ => string ‘26‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘94755‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 30 => array ‘target_id‘ => string ‘30‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘14171‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 36 => array ‘target_id‘ => string ‘36‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘54876‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => string ‘1‘ (length=1) 42 => array ‘target_id‘ => string ‘42‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘31354‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 43 => array ‘target_id‘ => string ‘43‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘66810‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 45 => array ‘target_id‘ => string ‘45‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘34868‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 50 => array ‘target_id‘ => string ‘50‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘79523‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 149 => array ‘target_id‘ => string ‘149‘ (length=3) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘59438‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 806 => array ‘target_id‘ => string ‘806‘ (length=3) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘14780‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null
如果不想要生成的二維數組的key值,或者說再精簡些,可以這樣:
$a = array( 0 => array(‘target_id‘ => ‘22‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘15261‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 1 => array(‘target_id‘ => ‘22‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘2‘, ‘extension_number‘ => ‘66002‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => ‘1‘,), 14 => array(‘target_id‘ => ‘22‘, ‘target_type‘ => ‘1‘,‘phone_type‘ => ‘4‘, ‘extension_number‘ => ‘56431‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 2 => array(‘target_id‘ => ‘24‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘54876‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => ‘1‘,), 3 => array(‘target_id‘ => ‘25‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘07143‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 13 => array(‘target_id‘ => ‘24‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘0‘, ‘extension_number‘ => ‘96949‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 4 => array(‘target_id‘ => ‘26‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘94755‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 5 => array(‘target_id‘ => ‘30‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘14171‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 6 => array(‘target_id‘ => ‘36‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘54876‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => ‘1‘,), 7 => array(‘target_id‘ => ‘42‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘31354‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 8 => array(‘target_id‘ => ‘43‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘66810‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 9 => array(‘target_id‘ => ‘45‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘34868‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 10 => array(‘target_id‘ => ‘50‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘79523‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 11 => array(‘target_id‘ => ‘149‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘59438‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), 12 => array(‘target_id‘ => ‘806‘, ‘target_type‘ => ‘1‘, ‘phone_type‘ => ‘1‘, ‘extension_number‘ => ‘14780‘, ‘phone_id‘ => ‘1‘, ‘phone_number‘ => ‘4008285599‘, ‘extension_special‘ => NULL,), ); $target = array(); $temp = array(); foreach ($a as $val) { if (!empty($target)) { if (in_array($val[‘target_id‘], array_keys($target))) { if (!empty($temp[$val[‘target_id‘]])) { $target[$val[‘target_id‘]] = null; $target[$val[‘target_id‘]][] = $temp[$val[‘target_id‘]]; $temp[$val[‘target_id‘]] = null; } $target[$val[‘target_id‘]][] = $val; } else { $temp[$val[‘target_id‘]] = $val; $target[$val[‘target_id‘]] = $val; } } else { $temp[$val[‘target_id‘]] = $val; $target[$val[‘target_id‘]] = $val; } } var_dump($target);exit;
生成結果如:
array 22 => array 0 => array ‘target_id‘ => string ‘22‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘15261‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 1 => array ‘target_id‘ => string ‘22‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘2‘ (length=1) ‘extension_number‘ => string ‘66002‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => string ‘1‘ (length=1) 2 => array ‘target_id‘ => string ‘22‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘4‘ (length=1) ‘extension_number‘ => string ‘56431‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 24 => array 0 => array ‘target_id‘ => string ‘24‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘54876‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => string ‘1‘ (length=1) 1 => array ‘target_id‘ => string ‘24‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘0‘ (length=1) ‘extension_number‘ => string ‘96949‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 25 => array ‘target_id‘ => string ‘25‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘07143‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 26 => array ‘target_id‘ => string ‘26‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘94755‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 30 => array ‘target_id‘ => string ‘30‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘14171‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 36 => array ‘target_id‘ => string ‘36‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘54876‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => string ‘1‘ (length=1) 42 => array ‘target_id‘ => string ‘42‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘31354‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 43 => array ‘target_id‘ => string ‘43‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘66810‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 45 => array ‘target_id‘ => string ‘45‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘34868‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 50 => array ‘target_id‘ => string ‘50‘ (length=2) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘79523‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 149 => array ‘target_id‘ => string ‘149‘ (length=3) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘59438‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null 806 => array ‘target_id‘ => string ‘806‘ (length=3) ‘target_type‘ => string ‘1‘ (length=1) ‘phone_type‘ => string ‘1‘ (length=1) ‘extension_number‘ => string ‘14780‘ (length=5) ‘phone_id‘ => string ‘1‘ (length=1) ‘phone_number‘ => string ‘4008285599‘ (length=10) ‘extension_special‘ => null
我這樣寫有些復雜,但是這種需求在網上很難搜到代碼,所以自己貼一份,給大家審查下,看看還有什麽更簡單的方法實現,畢竟我的算法學的還是挺差的。歡迎指點討論謝謝。
php將一個二維數組按照某個字段值合並成一維數組,如果有重復則將重復的合並成二維數組