2015-07-20 91 views
0

我在一個腳本中使用array_walk,我可以調用一個特定的函數;現在,我想從類似函數池中隨機調用一個函數,並操作數組值。它可能是一個循環結構。更具體地說,它們都是圖像功能,動態生成圖像。另一個要求是我需要按照特定順序將圖像保存在諸如001.jpg,002.jpg,003.jpg等文件夾中。目前,我正在使用代碼imagejpeg($im, "savedimages/" . time() . "-" . rand() . ".jpg", 90);保存圖像隨着我隨機調用一個函數,是否可以在保存圖像時保持相似的順序。我需要一個想法如何做到這一點。php array_walk函數在循環中隨機調用多個函數

$fontFace = 'AmsiPro-Ultra.ttf'; 
$sentences = preg_split('/(?<=[.?!])\s+(?=[a-z])/i', $html); 

array_walk($sentences, 'dynamicImage', $fontFace); 



function dynamicImage($sentence, $key, $fontFace) 
{ 
    $img  = 'green.jpg'; 
    $client = new Client; 
    $image = $client->loadJpeg($img); 
    $palette = $image->extract(); 

    imagickResize($img); 

    // create a transparent base image that we will merge the square image into. 
    $img = new Img(); 
    $img->create(640, 720, true); 

    // first image; merge with base. 
    $img2 = new Img('small_square_img.jpg'); 
    $img->merge($img2); 
    $img->save(); 

    $color = 'D2F57D'; 
    pngcolorizealpha('second_img.png', $color); 


    stringFunction($sentence, $palette[0], $fontFace); 

    $im = mergeImages(array(
    'first.image.jpg', 
    'second.image.jpg' 
    )); 

    # header('Content-type: image/jpg'); 
    imagejpeg($im, "savedimages/" . time() . "-" . rand() . ".jpg", 90); 
    } 
+0

有趣的是,你會想使用它的閉包,數組長度 – ArtisticPhoenix

回答

0

像這樣

$func_1 = function(){ 
    echo '1'; 
}; 

$func_2 = function(){ 
    echo '2'; 
}; 


$functions = array(
     $func_1, 
     $func_2, 
     .. 
); 

array_shuffle($functions); 
$functions[1](); 

foreach($functions as $index => $function){ 
     $function(); 
    } 

在最後一個array_shuffle,如果我沒記錯的話就會復位鍵,如果不是你可以做array_values($函數)重置它們。還請注意我沒有測試過這個,但基本上這應該工作。