将键添加到现有数组值中

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
    )

)

我想要将a、b、c添加到值为417的例子中。
期望结果:
Array
(
    [1039] => 1039
    [417] => Array
    (
        [0] => a
        [1] => b
        [2] => c
    )
    [418] => 418

)

这怎么做呢?
解决方案:
$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); 

您所期望的结果不是一个有效的 PHP 对象。您不能在同一数组元素中同时拥有数字和数组。 - Barmar
你想用一个数组替换 $array[1] 的值?你所说的“追加”是什么意思? - Ja͢ck
我有一个数组,想将另一个数组的值加上417。这可行吗? - Bas
@Bas 你真的想要这么做的原因是什么? - Zarathuztra
我尝试了你的“解决方案”,但它没有产生你想要的输出。你能否修正问题,以便准确描述你想要的结果? - Barmar
显示剩余3条评论
6个回答

1

虽然这并不是很合理,但这可以实现您在示例中展示的功能:

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

.= 运算符用于字符串拼接,将 true 作为第二个参数传递给 print_r 可以使其返回它本来会打印的字符串。

这样的结果是,$array[1] 是一个以 417 开头并后跟添加数组的打印表示的字符串。实际上没有一个数组存在其中。我不确定您打算如何使用它,但它与您的示例匹配。


0

在这种情况下不要使用数组推送(虽然我可能没有理解你的问题)

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

1
这将用新的子数组替换417,而不是像他期望的结果一样追加它(诚然,这实际上是不可能的)。 - Barmar
是的,我同意他原来的写法是不可能的,所以我一直希望这只是一个拼写错误而已。 - 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"));

这不会产生他想要的结果。 - Barmar
看起来我并没有完全理解原帖作者所期望的输出。 - Giacomo1968

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" } } 

这与他在问题中所做的有何不同? - Barmar
也许您忘记了什么。请键入您的代码(而不是print_r($array)或var_dump($array))。 - Vitalii

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);
    }
}

差不多了!我的417号在哪里?我也需要它。 - Bas

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接