PHP 列表数组


PHP list arrays

是否可以列出带有函数的数组中的数组?

有一个插件的配置数组,我在其中调用函数,该函数将列出数组中的数组。

'fields' => array(
                array('id'=>'someid','id'=>'something'),
                array('id'=>'someid','id'=>'something'),
                array('id'=>'someid','id'=>'something')
            )

我做了功能:

function config(){
                $a = array('id'=>'someidA','id'=>'somethingA');
                $b = array('id'=>'someidB','id'=>'somethingB');
    return array($a,$b);
}

当在数组中调用 config() 函数时,我得到:

'fields' => array(
                array('id'=>'someid','id'=>'something'),
                array('id'=>'someid','id'=>'something'),
                array('id'=>'someid','id'=>'something'),
                array(
                      array('id'=>'someidA','id'=>'somethingA'),
                      array('id'=>'someidB','id'=>'somethingB')
                      )
            )

但我需要:

'fields' => array(
                array('id'=>'someid','id'=>'something'),
                array('id'=>'someid','id'=>'something'),
                array('id'=>'someid','id'=>'something'),
                array('id'=>'someidA','id'=>'somethingA'),
                array('id'=>'someidB','id'=>'somethingB')
            )

我知道这有效:

'fields' => array(
                    array('id'=>'someid','id'=>'something'),
                    array('id'=>'someid','id'=>'something'),
                    array('id'=>'someid','id'=>'something'),
                    list($a,$b)=config(),
                    $a,$b,
                )

但它对我没有太大帮助,因为有时有很多 $a,$,$c,$d 等,所以如果以某种方式函数可以列出这些数组,那将是最好的。

有没有办法摆脱该容器数组并将数组直接列出到另一个数组?

>array_merge会为你工作。它将 2 个或多个数组合并为一个数组。

<?php
$arr = array(
    'fields' => array(
        array('id1'=>'someid','id2'=>'something'),
        array('id1'=>'someid','id2'=>'something'),
        array('id1'=>'someid','id2'=>'something')
        )
       );
function config(){
    $a = array('id1'=>'someidA','id2'=>'somethingA');
    $b = array('id1'=>'someidB','id2'=>'somethingB');
    return array($a,$b);
}
$config_arr = config();
$arr['fields'] = array_merge($arr['fields'], $config_arr);
print_r($arr);
?>

工作示例。

输出

Array
(
    [fields] => Array
        (
            [0] => Array
                (
                    [id1] => someid
                    [id2] => something
                )
            [1] => Array
                (
                    [id1] => someid
                    [id2] => something
                )
            [2] => Array
                (
                    [id1] => someid
                    [id2] => something
                )
            [3] => Array
                (
                    [id1] => someidA
                    [id2] => somethingA
                )
            [4] => Array
                (
                    [id1] => someidB
                    [id2] => somethingB
                )
        )
)

作为萨米尔解决方案的替代方案...

通过使用 "splat 运算符" ( ... ) 从config()中解压缩返回的数组,然后array_push()追加两个子数组,您可以获得所需的结果。

代码:(演示)

$config = [
    'fields' => [
        ['id1' => 'someid', 'id2' => 'something'],
        ['id1' => 'someid', 'id2' => 'something'],
        ['id1' => 'someid', 'id2' => 'something']
    ]
];
function config() {
    $a = ['id1' => 'someidA','id2' => 'somethingA'];
    $b = ['id1' => 'someidB','id2' => 'somethingB'];
    return [$a, $b];
}
array_push($config['fields'], ...config());
var_export($config);