PHP:为一个值分配两个键;使2个键具有同义定义

问题描述 投票:1回答:2

我试图创建一种系统地修改音乐结构的方法。主要比例由数字1-7表示(以另一种方式表示为C = 1,D = 3,E = 5,F = 6,G = 8,A = 10,B = 12,因为所有相邻音符除了EF和BC之外,它们之间都有意外情况。)在另一个数组中,每个音符由唯一ID号表示的一组音符可以在乐器上播放,每个音符都分配了1-7的概念功能。然后,通过将该组音符与下面的列表进行比较,我可以根据正在播放的音阶调整实际音符,并向玩家显示如何播放所需的结构。例如,mixolydian量表的第7个音符减少1,而lydian音阶的第四个音符增加1.(在上面的例子中,这会将B从12变为11,或者将F从6变为7 。)

$qualityDefinitions = array(
"major" => array(), //default, no changes
"mixolydian" => array("7" => -1), //flat 7,etc 
"dorian" => array("3" => -1, "7" => -1),
"aeolian" => array("3" => -1, "6" => -1, "7" => -1),
"phyrgian" => array("2" => -1, "3" => -1, "6" => -1, "7" => -1),
"lydian" => array("4" => 1),
"locrian" => array("2" => -1, "3" => -1, "5" => -1, "6" => -1, "7" => -1)
);

但是,我希望能够以同义方式访问存储在这些数组键中的信息。例如,如果我想构建一个占优势的7和弦(有1,3,5,b7),我只需要修改mixolydian音阶。但是说和弦是“mixolydian”是不寻常的;它通常被描述为“显性7”,“dom7”或仅仅是“7”。

有没有办法稍微改变我用于此需求的数据结构,以便我可以使用:$ qualityDefinitions ['dom7']和$ qualityDefinitions ['mixolydian']访问相同的定义,或者就是这样的情况我需要以一种概念上不同的方式来考虑这个问题并对我的代码进行实质性的更改? (作为一个新手,我知道可能有一种更抽象,更有效的方法来做到这一点,现在略微超出我的想象,但如果可能的话,我宁愿这样做。)

php arrays theory
2个回答
1
投票

你可以在以下之后做到:

$qualityDefinitions["dominant 7"] = & $qualityDefinitions["mixolydian"];

这使得“mixolydian”键的“显性7”键引用(或者是其同义词)。

如果你想轻松拥有其中的几个,你可以这样做:

$synonyms = array(
    "mixolydian" => array("dominant 7", "dom7", "7"),
    "lydian" => array("whatever", "it's", "called"),
);

foreach ($synonyms as $k => $a)
{
    foreach ($a as $v)
        $qualityDefinitions[$v] = & $qualityDefinitions[$k];
}

1
投票

根据我的理解,您需要一种方法来调用具有不同索引(字符串类型)的数组的相同元素。

如果是这样,您可以使用索引值定义字符串。

例如,如果arr ['dominant']意味着实际上是arr [0]。您可以在php中定义'dominant'以使其值为0:

<?php
  define("dominant",0); ?>

现在你想要更多的字符串来指示相同的0索引,如'dominant'。例如,现在你想要'dom7','d7'被调用,这将指示相同的第0个索引。简单定义如下:

<?php
      define("dominant",0);
      define("dom7",0); // Newly added 
      define("d7",0);   // Newly added
?>

现在,如果你回显arr [“dominant”],arr [“dom7”]和arr [“d7”],它们都将打印相同的值,因为它们都索引为0。

我想,这会对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.