2012-04-18 167 views
0

我被卡住了。我有兩個數組,我想合併,忽略空值,並返回一個字符串。如:php組合陣列忽略空值

$Array1 ([0] => [1] => Monday [2] => Wednesday [3] => Friday [4] => Sunday) 
$Array2 ([0] => [1] => 8am [2] => [3] => 10am [4] => [5] => 2pm [6] => [7] => 4pm) 

返回:

週一上午8點,上午10點週三,週五下午,週日下午4點

在此先感謝...

+0

如果您還沒有嘗試過,則可以使用array_filter()。 – 2012-04-18 17:38:42

+0

嘗試array_keys/array_values函數來擺脫空的部分? – Hajo 2012-04-18 17:45:26

回答

2
$periods = array(); 
foreach (array_combine(array_filter($Array1), array_filter($Array2)) as $day => $hour) { 
    $periods[] = $day . ' ' . $hour; 
} 
echo implode(', ', $periods); 
+0

很乾淨。涼。希望我能這樣想... – tim 2012-04-18 23:59:31

2

這是不完全清楚你想要的輸出格式,但使用array_filter()是第一步:

$a1 = array(null, 'Monday', 'Wednesday', 'Friday', 'Sunday'); 
$a2 = array(null, '8am', null, '10am', null, '2pm', null, '4pm'); 

$a1 = array_filter($a1); 
$a2 = array_filter($a2); 

這將刪除空位。然後您可以使用foreach來構建您的輸出。對於數組的數組:

$out = array(); 
foreach ($a1 as $e) $out[] = array($e, array_shift($a2)); 

爲一個字符串數組:

$out = array(); 
foreach ($a1 as $e) $out[] = $e.' '.array_shift($a2); 

演示示出了這兩種類型的輸出:http://codepad.org/ITZJH4RL

+0

array_filter()刪除空條目正是我正在尋找。我的代碼的其餘部分工作得很好。謝謝! – tim 2012-04-18 23:55:55

1

的骯髒的方式類做到這一點,但..

//Your arrays: 
$Array1 = array(null , Monday, Wednesday, Friday, Sunday) 
$Array2 = array(null, 8am, null, 10am,null, 2pm, null, 4pm) 
$Array3 =(); 
foreach($Array2 as $key=>$val): 
    if($val != ''): 
     array_push($Array3, $val); 
    endif; 
endforeach; 

// This assumes you have the same number of values in each array 
foreach($Array1 as $key=>$val): 
    $Array1[$key] = $Array1[$key] . " " . $Array3[$key]; 
endforeach; 

var_dump($Array1); 

給它一個鏡頭,讓我知道,如果你有任何錯誤。

編輯:將示例數組轉換爲實際數組,而不是將它們從示例中列出。

+0

是的,我知道,我只是從他的例子中抽出他的數組。 – 2012-04-18 19:10:04

+0

array_push()在我的foreach()中也會有效... – tim 2012-04-18 23:57:59