如何根据PHP的位置调用函数?

时间:2019-06-01 10:32:45

标签: php arrays function loops

我目前正在尝试为PHP中的一些div构建排序功能。首先,我将每个部分放入一个函数中,这样当我调用该函数时,该部分就会被打印出来。

现在我有一个问题,我不知道如何根据其位置调用每个部分?这是我的代码:

    $elements = array(
        'section_one'   => 6,
        'section_two'   => 1,
        'section_three' => 0,
        'section_four'  => 3,
        'section_five'  => 2,
        'section_six'   => 5,
        'section_seven' => 4
    );

    foreach ( $elements as $element => $position ) {

    }

    get_section_one( $a, $b, $c );
    get_section_two( $a, $b, $c, $d );
    get_section_three( $a, $b );
    get_section_four( $a );
    get_section_five( $a, $b, $c, $d, $e );
    get_section_six( $a, $b, $c );
    get_section_seven( $a, $b, $c );

每个函数都有未定义的不同参数。 $elements数组具有一个键(该键是段的名称)和一个值(定义位置)。

那么,有谁知道我如何根据从最低编号到最高编号的位置调用每个函数?

在我的示例中,section_three必须是第一个应调用的元素...

2 个答案:

答案 0 :(得分:3)

要进行排序,您需要sort your array(现在需要asort()),但是在此之前,我需要重新处理数组并使函数位置成为键,而不是您所拥有的值现在(假设职位当然是唯一的)。排序后,您可以使用常规的foreach($elements as $func_name)进行迭代,而您正在寻找的辅助方法是call_user_func()

foreach ( $elements as $func_name ) {
    call_user_func($func_name, ....)
}

尽管有一个问题,每个函数的参数个数不同,所以这可能会很棘手。您可能需要重新处理函数以接受参数数组。这可能会带来更多好处,因为arguments数组可能是您的$elements数组的十个部分,因此不需要其他“构建器”逻辑,即:


$elements = [
  0 => [ 'name' => 'section_three',
         'args' => [$a, $b],
       ],
  ...
  2 => [ 'name' => 'get_section_five',
         'args' => [$a, $b, $c, $d, $e],
       ],
  ...
];

ksort($elements);

foreach($elements as $el) {
    call_user_func($el['name'], $el['args']);
}

答案 1 :(得分:-2)

您可以在循环之前使用asort()对元素进行排序(保留数组的键)。

$elements = array(
    'section_one'   => 6,
    'section_two'   => 1,
    'section_three' => 0,
    'section_four'  => 3,
    'section_five'  => 2,
    'section_six'   => 5,
    'section_seven' => 4
);

asort($elements);

foreach ( $elements as $element => $position ) {

}