2013-12-17 105 views
3

我有以下數組,並通過使用array_push &我得到不正確的結果。追加鍵到現有的數組值

陣列:

Array 
(
    [0] => 1039 
    [1] => 417 
    [2] => 418 
) 

陣列推送:

array_push($array, array("a","b","c")); 

結果:

Array 
(
    [0] => 1039 
    [1] => 417 
    [2] => 418 
    [3] => Array 
    (
     [0] => a 
     [1] => b 
     [2] => c 
    ) 

) 

我想要的一個,B,C追加到重視417例如。

Disirable結果:

Array 
(
    [1039] => 1039 
    [417] => Array 
    (
     [0] => a 
     [1] => b 
     [2] => c 
    ) 
    [418] => 418 

) 

如何才能做到這一點?

SOLUTION:

$data = Array (
    0 => 1039, 
    1 => 417, 
    2 => 418, 
); 

foreach($data as $key => $val) { 
    $new_data[$val] = 0; 
} 

foreach($new_data as $k => $v){ 
    if($k == 417){ 
     $new_data[$k] = array('p' => 50, 'pp' => 75); 
    } 
} 
print_r($new_data); 
+0

你的期望的結果是不是有效的PHP對象。你不能在同一個數組元素中同時擁有一個數字和一個數組。 – Barmar

+0

嗨巴爾馬。我想追加到例如一個數組值417 – Bas

+0

你想用數組替換'$ array [1]'的值嗎?追加意味着什麼? –

回答

0

使用循環來顯示新的數組數據

$data = Array (
     0 => 1039, 
     1 => 417, 
     2 => 418, 
    ); 

foreach($data as $key => $val) { 
    if ($val == 417) { 
     $val = array('a','b','c'); 
    } 

    $new_data = array($key => $val); 
    foreach($new_data as $key2 => $val2) { 
     if (is_array($val2)) { 
      $val2 = array(417 => $val); 
     } 
     $new_data1 = array($key2 => $val2); 

    print_r($new_data1); 
    } 
} 
+0

差不多!我的號碼是417?我也需要這個。 – Bas

+0

我更新了上面的代碼。 – zai

0

不要在此情況下(當然我可能會丟失你的問題)

$arr = array(1,2,3); 
$arr[1] = array('a','b','c'); 
//would output your above example. 
+1

這個用新的子數組代替'417',它不會像他想要的結果那樣追加它(這實際上是不可能的)。 – Barmar

+0

是的,我同意他的原創是不可能的,所以我希望和祈禱它只是一個錯字;) – Zarathuztra

0

就做這樣的&預期都應該努力用陣推:

array_push($array, "a", "b", "c"); 

array_push說明書最好解釋一下:

$stack = array("orange", "banana"); 
array_push($stack, "apple", "raspberry"); 
print_r($stack); 

但是,如果您要添加的值是一個數組已經,那麼也許使用array_merge代替:

array_merge($array, array("a","b","c")); 
+0

這不會產生他想要的結果。 – Barmar

+0

Welp,看起來像我不完全理解原始海報的所需輸出。 – JakeGould

0

我運行PHP代碼:

$arr = array(0=>1039,1=>417,2=>418); 
array_push($arr, array("a","b","c")); 
var_dump($arr); 

而且後續代碼var_dump($ ARR )

array(4) { [0]=> int(1039) [1]=> int(417) [2]=> int(418) [3]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } } 
+0

這與他在問題中所做的有何不同? – Barmar

+0

也許你忘了一些東西。請輸入您的代碼(不是print_r($ array))或var_dump($ array)。 – Vitalii

0

使用array_splice

array_splice($your_arrray, 1, 0, array("a","b","c")); 
1

它並沒有真正意義,但是這對你在你的例子顯示什麼:

$array[1] .= print_r(array("a","b","c"), true); 

.=做字符串連接,並通過true作爲第二個參數print_r使它返回它將打印的字符串。

這樣做的結果是$array[1]是一個以417開頭的字符串,後面跟着添加數組的打印表示形式。那裏沒有真正的陣列。我不確定你打算怎麼做,但它符合你的例子。