2011-11-29 57 views
0

我有一個數組,看起來像這樣,多維數組,移動到一個簡單的數組

[0] => Array 
    (
     [youtube_showreel_url_1] => youtube1.com 
     [youtube_showreel_description] => youtube1.com - desc 
    ) 

[1] => Array 
    (
     [youtube_showreel_url_2] => youtube2.com 
     [youtube_showreel_description] => youtub2.com - desc 
    ) 

[2] => Array 
    (
     [youtube_showreel_url_3] => youtube3.com 
     [youtube_showreel_description] => youtube3.com - desc 
    ) 

[3] => Array 
    (
     [youtube_showreel_url_4] => youtube4.com 
     [youtube_showreel_description] => youtube4.com - desc 
    ) 

[4] => Array 
    (
     [youtube_showreel_url_5] => youtube5.com 
     [youtube_showreel_description] => youtube5.com - desc 
    ) 

是否有可能用PHP把它變成的東西,看起來像這樣?

[0] => Array ( 
     [youtube_showreel_url_1] => youtube1.com 
     [youtube_showreel_description] => youtube1.com - desc 
     [youtube_showreel_url_2] => youtube2.com 
     [youtube_showreel_description] => youtub2.com - desc 
     [youtube_showreel_url_3] => youtube3.com 
     [youtube_showreel_description] => youtube3.com - desc 
     [youtube_showreel_url_4] => youtube4.com 
     [youtube_showreel_description] => youtube4.com - desc 
     [youtube_showreel_url_5] => youtube5.com 
     [youtube_showreel_description] => youtube5.com - desc 
    ) 

可以爆炸它或通過循環運行嗎?

+0

這應該是很容易做到,但你的結果有很多相同的密鑰(即,'youtube_showreel_description'),因此他們會改寫。你可以用像'url_#'那樣的數字來表示嗎? – Wiseguy

回答

0
<?php 

$aNonFlat = array(
    1, 
    2, 
    array(
     3, 
     4, 
     5, 
     array(
      6, 
      7 
     ), 
     8, 
     9, 
    ), 
    10, 
    11 
); 

$objTmp = (object) array('aFlat' => array()); 

array_walk_recursive($aNonFlat, create_function('&$v, $k, &$t', '$t->aFlat[] = $v;'), $objTmp); 

var_dump($objTmp->aFlat); 

/* 
array(11) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
    [2]=> 
    int(3) 
    [3]=> 
    int(4) 
    [4]=> 
    int(5) 
    [5]=> 
    int(6) 
    [6]=> 
    int(7) 
    [7]=> 
    int(8) 
    [8]=> 
    int(9) 
    [9]=> 
    int(10) 
    [10]=> 
    int(11) 
} 
*/ 

?> 

來源:http://ca.php.net/manual/fr/function.array-values.php#86784

1

假設你的原始數據是在一個名爲$input變量中:

// This will hold the result 
$result = array(); 

foreach ($input as $index => $item) { // Loop outer array 
    foreach ($item as $key => $val) { // Loop inner items 
    $result[$key] = $val; // Create entry in $result 
    } 
} 

// Show the result 
print_r($result); 

然而,你的輸入具有相同的密鑰出現在一次以上,並後來的值將覆蓋第一個值。所以,你可能想要做這樣的事情:

foreach ($input as $index => $item) { // Loop outer array 
    foreach ($item as $key => $val) { // Loop inner items 
    $result[$key.$index] = $val; // Create entry in $result 
    } 
} 
0

數組鍵有唯一的名字這意味着你將無法擁有多個youtube_showreel_description鍵,否則你只是簡單地覆蓋該值。您可以將該密鑰重命名爲youtube_showreel_description_NN,其中NN是類似於您擁有網址的描述的編號。

0

會有的「youtube_showreel_description」碰撞

你應該想到更好的數據結構爲

我建議你保留它的多維數組結構

Array 
(
    [0] => Array 
     (
       [url] => youtube1.com 
       [description] => youtube1.com - desc 
     ) 
    [1] => Array 
     (
       [url] => youtube2.com 
       [description] => youtube2.com - desc 
     ) 
    [2] => Array 
     (
       [url] => youtube3.com 
       [description] => youtube3.com - desc 
     ) 
    [3] => Array 
     (
       [url] => youtube1.com 
       [description] => youtube3.com - desc 
     ) 
    [4] => Array 
     (
       [url] => youtube1.com 
       [description] => youtube4.com - desc 
     ) 
) 

如果你喜歡這樣,我認爲它更清潔,更容易解析

0

不完全,[youtube_showreel_description]會覆蓋e自己在每次聲明後,您需要爲每個密鑰使用唯一的標識符。如果鍵不重要,你可以用foreach循環遍歷你現有的數組,並設置一個常規的迭代鍵,並且「知道」該數組來自哪裏第一個元素是url,第二個是描述。

編輯:如果鍵不重要,可以使用url作爲鍵和描述作爲值,這樣可以更容易迭代,因爲每個元素只與一個項目有關。

0

大家都已經提到的,你會得到「youtube_showreel_description」的碰撞。怎麼樣這樣的事情?:

// values (stays the same - no need to reformat) 
$values = array(
    array(
    'youtube_showreel_url_1' => 'youtube1.com', 
    'youtube_showreel_description' => 'youtube1.com desc' 
), 
    array(
    'youtube_showreel_url_2' => 'youtube2.com', 
    'youtube_showreel_description' => 'youtube2.com desc' 
), 
    array(
    'youtube_showreel_url_3' => 'youtube3.com', 
    'youtube_showreel_description' => 'youtube3.com desc' 
), 
    array(
    'youtube_showreel_url_4' => 'youtube4.com', 
    'youtube_showreel_description' => 'youtube4.com desc' 
) 
); 

// the good stuff 
$result = array_map(function($v) { 
    return array(
    'url'   => array_shift($v), 
    'description' => $v['youtube_showreel_description'] 
); 
}, $values); 


// result 
array(4) { 
    [0]=> 
    array(2) { 
    ["url"] => string(12) "youtube1.com" 
    ["description"] => string(17) "youtube1.com desc" 
    } 
    [1]=> 
    array(2) { 
    ["url"] => string(12) "youtube2.com" 
    ["description"] => string(17) "youtube2.com desc" 
    } 
    [2]=> 
    array(2) { 
    ["url"] => string(12) "youtube3.com" 
    ["description"] => string(17) "youtube3.com desc" 
    } 
    [3]=> 
    array(2) { 
    ["url"] => string(12) "youtube4.com" 
    ["description"] => string(17) "youtube4.com desc" 
    } 
} 
+0

免責聲明:5.3必填;) –

相關問題