2012-01-13 46 views
0

我有一個數組,顯示如下。我想把它分成兩半,並從兩半中創建兩個新陣列。但是,如果我使用array_slice,它總是返回null ...我不明白爲什麼。無法切片數組 - 我需要將數組分割成一半

array 
    'pic' => 
    array 
     0 => string '740' (length=3) 
     1 => string '741' (length=3) 
     2 => string '742' (length=3) 
     3 => string '748' (length=3) 
    'alt' => 
    array 
     0 => string '' (length=0) 
     1 => string '' (length=0) 
     2 => string 'Test caption 1' (length=14) 
     3 => string 'Test caption 2' (length=14) 

我需要的陣列應該保留鍵,只是切成兩半,所以我有兩個免費的一半。例如,上半年應該是這樣的:

array 
    'pic' => 
    array 
     0 => string '740' (length=3) 
     1 => string '741' (length=3) 
    'alt' => 
    array 
     0 => string '' (length=0) 
     1 => string '' (length=0) 

和下半年:

array 
    'pic' => 
    array 
     0 => string '742' (length=3) 
     1 => string '748' (length=3) 
    'alt' => 
    array 
     0 => string 'Test caption 1' (length=14) 
     1 => string 'Test caption 2' (length=14) 

感謝

PS - 邁克,這是我使用的是什麼使陣列,實際上它是由其他陣列構成的:

$lodgepics = get_field('accommodation_rooms'); 
$featuredpics = get_field('featured_pics'); 
$showcasepics = array(); 
foreach ($featuredpics as $featuredpic) { 
    if (isset($featuredpic['featured_pic'])&&!empty($featuredpic['featured_pic'])) $showcasepics[pic][] = $featuredpic['featured_pic']; 
    if (isset($featuredpic['featured_alt'])) $showcasepics[alt][] = $featuredpic['featured_alt']; 
else $showcasepics[alt][] = ''; 
} 
foreach ($lodgepics as $lodgepic) { 
    if(isset($lodgepic['accommodation_roomphoto'])&&!empty($lodgepic['accommodation_roomphoto'])) $showcasepics[pic][] = $lodgepic['accommodation_roomphoto']; 
    if(isset($lodgepic['accommodation_roomname'])&&!empty($lodgepic['accommodation_roomname'])) $showcasepics[alt][] = $lodgepic['accommodation_roomname']; 
    else $showcasepics[alt][] = ''; 
} 

回答

1

我很難把握,需要做一些像你所建議的東西,如果是我,我不會使用結構填充數組,我將創建一個這樣的數組:

array 
    0 => 
    array 
     'pic' => string '740' (length=3) 
     'alt' => string '' (length=0) 
    1 => 
    array 
     'pic' => string '741' (length=3) 
     'alt' => string '' (length=0) 
    2 => 
    array 
     'pic' => string '742' (length=3) 
     'alt' => string 'Test Caption 1' (length=0) 
    3 => 
    array 
     'pic' => string '748' (length=3) 
     'alt' => string 'Test Caption 2' (length=0) 

該數組結構將圖像屬性保留在一起,而不是將它們分開。

tomtheman5有80%存在,但省略了偏移量,並且需要傳遞array_slice調用的長度參數以獲取正確的切片。不過他的確提供了一個很好的觀點,如果你堅持使用數組結構,那麼如果每個'pic'和'alt'數組中沒有匹配的元素,就可能會遇到問題。如果這不是一個問題,然後再考慮下面的代碼片段:

$slice1 = array(); 
$slice2 = array();  

foreach ($array as $key => $value) { 

    $arrayCount = count($array[$key]); 
    $arrayHalfCount = ($arrayCount/2); 

    $slice1[$key] = array_slice($array[$key], 0, $arrayHalfCount); 
    $slice2[$key] = array_slice($array[$key], $arrayHalfCount); 
} 

- 編輯 -

$lodgepics = get_field('accommodation_rooms'); 
$featuredpics = get_field('featured_pics'); 
$showcasepics = array(); 
foreach ($featuredpics as $featuredpic) { 
    if ((isset($featuredpic['featured_pic'])) && (!empty($featuredpic['featured_pic']))) { 
     $currentPic['pic'] = $featuredpic['featured_pic']; 
     $currentPic['alt'] = (isset($featuredpic['featured_alt'])) ? $featuredpic['featured_alt'] : ''; 
     $showcasepics[] = $currentPic; 
} 
} 

foreach ($lodgepics as $lodgepic) { 
    if ((isset($lodgepic['accommodation_roomphoto'])) && (!empty($lodgepic['accommodation_roomphoto']))) { 
     $currentPic['pic'] = $lodgepic['accommodation_roomphoto'];  
     $currentPic['alt'] = (isset($lodgepic['accommodation_roomname'])) ? $lodgepic['accommodation_roomname'] : ''; 
     $showcasepics[] = $currentPic; 
} 
} 

$showcasepicsCount = count($showcasepics); 
$showcasepicsHalfCount = ($showcasepicsCount/2); 

$slice1 = array_slice($showcasepics, 0, $showcasepicsHalfCount); 
$slice2 = array_slice($showcasepics, $showcasepicsHalfCount); 
+0

嗨邁克,感謝您的建議是非常有幫助的 我已經包含了我在原始文章中構建數組的代碼,可以檢查它嗎?也許我可以簡單地調整數組,使其更容易切片和使用 - 謝謝 – unfulvio 2012-01-13 06:18:43

+0

http://stackoverflow.com/questions/8849009/create-merging-multidimensional-array-with-key-pairs-from-different-keys- two-d – unfulvio 2012-01-13 11:18:21

+1

@Fulvio:用建議的方式更新了文章,以建立您的圖像數組。 – 2012-01-13 19:18:54

2

這些實際上是數組的數組。主陣列是一個關聯數組,所以你會通過,以便在該陣列的所有密鑰需要循環,讓您的切片:

$slice1 = array(); 
$slice2 = array(); 
foreach ($array as $key => $value) 
{ 
    $slice1[$key] = array_slice($array[$key], ...); 
    $slice2[$key] = array_slice($array[$key], ...); 
} 
+0

這似乎是一個局部的解決方案,「...」表示偏移和長度需要傳遞給array_slice調用。 – 2012-01-13 05:06:20

+0

對不起,應該有具體說明。不知道預計的行爲應該與奇數個元素有什麼關係,所以我沒有嘗試。 – 2012-01-13 05:13:48

1

array_chunk - 斯普利特的數組分成塊

$array1 = array("1" => "green", "2" => "brown", "3" => "blue", "4" => "black"); 
$array2 = array("5" => "yellow","6" => "orange","7"=> "violet","8"=> "white"); 

$arraylength1 = ceil(count($array1)/2); 
$res1   = array_chunk($array1,$arraylength1); 
$arraylength2 = ceil(count($array2)/2); 
$res2   = array_chunk($array2,$arraylength2); 

echo "<pre>"; 
print_r($res1); 
print_r($res2); 
echo "</pre>"; 
exit; 

嘗試這個。