Php 如何在数组中使用运算符进行操作
我意识到在PHP中数组不是以这种方式构建的。然而,我第一次尝试遗传算法,因为PHP是我最熟悉的语言,所以我用PHP编写它,稍后我将把它改为Python。无论如何,我有两个输入数组,其中一个是:Php 如何在数组中使用运算符进行操作,php,arrays,operators,genetic-algorithm,Php,Arrays,Operators,Genetic Algorithm,我意识到在PHP中数组不是以这种方式构建的。然而,我第一次尝试遗传算法,因为PHP是我最熟悉的语言,所以我用PHP编写它,稍后我将把它改为Python。无论如何,我有两个输入数组,其中一个是: $geneValues = array( '0000' => 0, '0001' => 1, '0010' => 2, '0011' => 3, '0100' => 4, '0101' => 5, '0110' =
$geneValues = array(
'0000' => 0,
'0001' => 1,
'0010' => 2,
'0011' => 3,
'0100' => 4,
'0101' => 5,
'0110' => 6,
'0111' => 7,
'1000' => 8,
'1001' => 9,
'1010' => '+',
'1011' => '-',
'1100' => '*',
'1101' => '/');
每个键都是一个存储值的“基因”。除了初始数组设置之外,我尝试完全不用动手,我有一个函数,通过将上述数组基因随机组合成一个多维数组来创建初始种群,这个多维数组将基因分组到染色体中,你猜到了。所以我可能有一条染色体,看起来像:0110100111
意思=>6+7
这一切都很有效。然而,我现在需要实际“计算”染色体,然而,由于加法运算符必须在数组中的引号中,它生成一个文本+
,而不是运算符。我的问题是,有没有办法让数组中的运算符成为实际的运算符,我知道有一个函数可以做到这一点,我唯一能想到的另一个选择是在我进行计算时将基因硬编码到运算符,这是我试图避免的
如果需要的话,我会发布完整的代码,它没有什么敏感性,只是试图简化我进入神经网络的方式,我想我会从实现遗传算法开始。有人有解决办法吗?看看。但是要小心
例如:
$value1 = 6;
$value2 = 3;
$operand = "-";
//$result will be 3
$result = eval("return (" . $value1 . $operand . $value2 . ");");
看一看。但是要小心
例如:
$value1 = 6;
$value2 = 3;
$operand = "-";
//$result will be 3
$result = eval("return (" . $value1 . $operand . $value2 . ");");
你和我一样思考
在PHP中,不可以将运算符视为数据(没有eval)。如果您再次尝试使用LISP,您将看到一个不同的故事。由于所有操作员都>0x09,因此很容易检测到它们。如果您将它们作为函数指针编写;您可以通过is_callable()检测并执行它们,而不是一段文本,并将其他项作为数据传递。这不是硬编码,因为您在函数中输入的任何内容都可以运行。如果不关心性能,可以通过create_function()动态创建函数。
作为最后一个选项,您可以使用eval(),例如eval(),一个包含所有三个基因的文本缓冲区。您所做的没有用户输入,因此正常的安全建议不适用 如果这是Perl,则可能会另外生成数字函数结果 你有没有想过用十进制或十六进制写出你最初的基因?这样更容易阅读。执行此操作时,您需要使用位掩码来拉出正确的字节。您的想法与我的想法相同 在PHP中,不可以将运算符视为数据(没有eval)。如果您再次尝试使用LISP,您将看到一个不同的故事。
由于所有操作员都>0x09,因此很容易检测到它们。如果您将它们作为函数指针编写;您可以通过is_callable()检测并执行它们,而不是一段文本,并将其他项作为数据传递。这不是硬编码,因为您在函数中输入的任何内容都可以运行。如果不关心性能,可以通过create_function()动态创建函数。
作为最后一个选项,您可以使用eval(),例如eval(),一个包含所有三个基因的文本缓冲区。您所做的没有用户输入,因此正常的安全建议不适用 如果这是Perl,则可能会另外生成数字函数结果
你有没有想过用十进制或十六进制写出你最初的基因?这样更容易阅读。执行此操作时,您需要使用位掩码来拉出正确的半字节。为什么要向下投票?这肯定会奏效(尽管@tobiaskun你的链接是到德国网站的)@sgroves:我自己也问过。Thx是关于德语链接的提示。使用这一个是因为它是最简单的语法(imo),并且它可以顺利地适应。还有你在处理所有解析错误,如
eval('return(+7-;)”)
?我没有投反对票。我只是想说明这可能是危险的,因为染色体被严重地洗牌了。因此,在使用eval
或错误处理等之前必须进行一些检查。为什么要进行否决投票?这肯定会奏效(尽管@tobiaskun你的链接是到德国网站的)@sgroves:我自己也问过。Thx是关于德语链接的提示。使用这一个是因为它是最简单的语法(imo),并且它可以顺利地适应。还有你在处理所有解析错误,如eval('return(+7-;)”)
?我没有投反对票。我只是想说明这可能是危险的,因为染色体被严重地洗牌了。因此,在使用eval
或使用str_split()
之前,必须进行一些检查。我们确定中间元素是运算符吗?+1中间元素必须是运算符,否则染色体应具有较小的适合性如果染色体具有OP指示的结构,并且可以保证在染色体上始终有一个操作符作为中间基因:还有一个潜在的被零除的可能性是的,中间元素必须是操作符,否则染色体将不工作,谢谢你指出了被零除的问题,我也必须考虑到这一点,真不敢相信我竟然没有想到使用开关
!和蔼可亲。虽然我可能不得不走eval路线来避免硬代码,而且eval似乎是邪恶的,如果用户输入是在mixId中,那么它就假定(可能是错误的)硬代码将基因编码到操作符
意味着实际上有一个PHP函数
作为数组值:也许@nope可以澄清+使用stru split()
。我们确定中间元素是运算符吗?+1中间元素必须是运算符,否则染色体应该具有较小的适合性,如果染色体具有OP所指示的结构,并且可以保证始终有一个运算符作为中间元素