2017-04-19 103 views
0

我的問題是非常直接的,但我很不確定如何以有效的方式做到這一點。PHP:如果子陣列只有一個值,用該值替換陣列

假設我們有一個這樣的數組:

array (
    [0] => array(
     [0] => "a" 
     ) 
    [1] => array(
     [0] => "b" 
     [1] => "c" 
     ) 
    ["a"] => array(
     ["b"] => "d" 
     ) 
    ) 

這並不重要,我閹羊或沒有密鑰將被保留,這是(有或無鍵保存,犯規是我最終想落得事情太多了):

預期輸出:

array (
    [0] => "a" 
    [1] => array(
     [0] => "b" 
     [1] => "c" 
     ) 
    ["a"] => "d" 
    ) 

我希望你能幫助!

〜Troels

+0

你到目前爲止嘗試過什麼? –

回答

3

這裏我們插入數組的第一個值。當的$value計數等於1

Try this code snippet here

<?php 
$array=array (
    0 => array(
     0 => "a" 
     ), 
    1 => array(
     0 => "b", 
     1 => "c" 
     ), 
    "a" => array(
     "b" => "d" 
     ) 
    ); 
foreach($array as $key => $value) 
{ 
    if(is_array($value) && count($value)==1) 
    { 
     $array[$key]=current($value); //replace array with lone value 
    } 
} 
print_r($array); 

輸出:

Array 
(
    [0] => a 
    [1] => Array 
     (
      [0] => b 
      [1] => c 
     ) 

    [a] => d 
) 
+2

哪裏的PHP標籤問題將有@Sahil Gulati的答案:D你太活躍(y) –

+1

@BunkerBoy:D:D:D哈哈....:D:DI愛你評論真棒..... –

+0

要把你的評論標記爲答案,因爲你認爲這個值可能不是一個數組,但在示例數組中我沒有考慮到這一點,但毫無疑問會發生;謝謝你的回答 –

1
$arr = array (
    0 => array(
     0 => "a" 
     ), 
    1 => array(
     0 => "b", 
     1 => "c" 
     ), 
    "a" => array(
     "b" => "d" 
     ) 
    ); 
    echo "<pre>"; print_r($arr); 
    foreach($arr as $key=>$val){ 
     if(is_array($val) && count($val) == 1){ 
      $arr[$key] = array_shift($val); //get first element of the array which have only one element 
     } 
    } 
     echo "<pre>"; print_r($arr); 

PHP Demo

+1

爲什麼要用array_shift()而不是簡單的'$ arr [$ key] = $ val [$ key];'? – Jack

+0

@Jack好的問題,請檢查數組並檢查子數組鍵,希望能清除您的疑問。我們不知道子數組的關鍵,這就是爲什麼我使用'array_shift()' – Bhaskar

+0

我的錯。謝謝你的親切回答。 – Jack

0
<?php 

$temp = array (
    0 => array(
     0 => "a" 
     ), 
    1 => array(
     0 => "b", 
     1 => "c" 
     ), 
    "a" => array(
     "b" => "d" 
     ) 
    ); 
    echo "<pre>"; print_r($temp); 
    $new_arr = array(); 

foreach ($temp as $key => $value) { 
    if(count($value)>1) 
     $new_arr[$key] = $value; 
    else 
    { 
     $new_arr[$key] = array_shift($value); 
    } 
} 
echo '<pre>'; print_r($new_arr);