使用array_map从种子数组创建数组时遇到错误

时间:2017-12-16 16:48:22

标签: php

我尝试使用$scenario['B']作为种子数据创建$scenario['C']$scenario['A']。所需的最终数组是:

$scenario['A'] = [  1,   2,   3,   4,   5,   6,   7,   8];
$scenario['B'] = [101, 102, 103, 104, 105, 106, 107, 108];
$scenario['C'] = [201, 202, 203, 204, 205, 206, 207, 208];

我尝试过以下操作,但收到错误消息:Notice: Undefined variable: value in test.php on line 32

$scenario['A'] = range(1, 8);
    foreach(['B' => 100, 'C' => 200] as $key => $value):
        $scenario[$key] = array_map(function($element) {return $element + $value;}, $scenario['A']);
    endforeach;

我尝试将array_map的一部分更改为function($element, $value),但会导致不同的错误Warning: Missing argument 2 for...为什么它看不到$ value?如何对其进行修改以使其有效?

这有效:

$scenario['A'] = range(1, 8);
foreach(['B' => 100, 'C' => 200] as $key => $value):
    $constant_array = array_fill(0, sizeof($scenario['A']), $value);
    $scenario[$key] = array_map(function($element, $constant) {return $element + $constant;}, $scenario['A'], $constant_array);
endforeach;

Per http://php.net/manual/en/function.array-map.php"回调函数接受的参数数量应与传递给array_map()"的数组数量相匹配。 function($element, $value)不起作用的原因是因为只有一个数组被传递给array_map()。必须使$ constant_array与种子数组$scenario['A']的大小相同,以便种子数组中的所有元素都受array_map()的影响。

但我更喜欢@Nigel Ren提供的答案。

1 个答案:

答案 0 :(得分:2)

您需要将tree(float f){ // CODE CREATED OBJECT,NO PROBLEM HERE } void display() { for (int i=216;i>=317;i++) //PROBLEM HERE,FOR LOOP NOT EXECUTED { glPushMatrix(); glTranslated(i, 6.8, -5.3); glScaled(0.2, 0.2, 0.2); tree(3.5); glPopMatrix(); } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(screenWidth, screenHeight); glutCreateWindow("Unexpected Adventure"); initRendering(); glutDisplayFunc(display); glutReshapeFunc(handleResize); glutIdleFunc(idle); glutKeyboardFunc(keyboard); init(); initGL(); glutMainLoop(); } 添加到函数调用中...

use

...给出

$scenario['A'] = range(1, 8);
foreach(['B' => 100, 'C' => 200] as $key => $value):
    $scenario[$key] = array_map(function($element) use ($value) 
            {return $element + $value;}, $scenario['A']);
endforeach;
print_r($scenario['B']);