我目前正在尝试为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
必须是第一个应调用的元素...
答案 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 ) {
}