Flu*_*feh 13 php arrays naming-conventions
根据哪些元素包含迭代器与细节元素,多维数组结构中的最佳实践是什么?
我的大部分编程经验(我主要是为了好玩而做)来自谷歌的以下教程,所以如果这似乎是一个特别愚蠢的问题,我提前道歉 - 但我确实想开始改进我的代码.
每当我需要创建一个多维数组时,我的命名总是将计数器放在第一个元素中.
例如,如果我有一个单维数组,如下所示:
$myArray['year']=2012;
$myArray['month']='July';
$myArray['measure']=3;
// and so on.
Run Code Online (Sandbox Code Playgroud)
但是,如果我想让相同的数组保留一些历史所有者,我会添加另一个维度并将其格式化如下:
$myArray[$owner]['year']=2012;
$myArray[$owner]['month']='July';
$myArray[$owner]['measure']=3;
Run Code Online (Sandbox Code Playgroud)
编辑:为了确保我的示例不是正确的方向或引导,我基本上遵循这个结构:
$myArray[rowOfData][columnOfData]
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是关于公认的惯例.我应该做以下吗?
$myArray['year'][$owner]=2012;
$myArray['month'][$owner]='July';
$myArray['measure'][$owner]=3;
Run Code Online (Sandbox Code Playgroud)
编辑:使用上面的编辑,它应该是:
$myArray[columnOfData][rowOfData]
Run Code Online (Sandbox Code Playgroud)
我已经搜索过有关数组命名约定的内容,但是仍在讨论是否将数组命名为复数的文章.我一直在命名它们的方式似乎更合乎逻辑,我认为它遵循一个更好地类似于一个对象的结构,object->secondaryLevel->detail
但是据我所知,我一直都在做这个问题.随着我越来越多地参与编程,如果他们错了,我宁愿改变我的习惯.
是否有可接受的标准,或者只是阵列的任何内容?如果您正在查看其他人编写的代码,那么期望的格式是什么?我知道任何有意义/直观的结构都是可以接受的.
从迭代的角度来看,以下哪一项更直观?:
for($i=0;$i<$someNumber;$i++)
{
echo $myArray[$i]['year'];
// OR
echo $myArray['year'][$owner];
}
Run Code Online (Sandbox Code Playgroud)
编辑:我确实把这篇文章标记为c#和Java,因为我想在PHP程序员之外得到一些意见.我认为,由于数组被用于许多不同的语言,所以从各种语言的程序员那里得到一些输入会很好.
Mik*_*ell 21
你的问题是主观的,因为每个人对你所陈述的情况都有不同的看法,你甚至可以提出问题; 如何最好地命名您的变量,类等等.不幸的是,我花费的时间比我更愿意承认确定最有意义且满足要求的变量名称.我的最终目标是编写" 自我记录 "的代码.通过编写自我记录代码,您会发现添加功能或修复缺陷会更容易.
多年来,我发现这些做法最适合我:
数组:总是复数
我这样做,所以循环控制结构更具语义感,并且更容易使用.
// With a plural array it's easy to access a single element
foreach ($students as $student) {}
// Makes more sense semantically
do {} (while (count($students) > 0);
Run Code Online (Sandbox Code Playgroud)
对象数组>深度多维数组
在你的例子中,你的数组开始被炸成3个元素的深度多维数组,并且正如Robbie的代码片段一样,它展示了迭代多维数组所需的复杂性.相反,我建议创建可以添加到数组中的对象.请注意,以下代码仅是演示,我总是使用访问器.
class Owner
{
public $year;
public $measure;
public $month;
}
// Demonstrative hydration
for ($i = 1 ; $i <= 3 ; $i++) {
$owner = new Owner();
$owner->year = 2012;
$owner->measure = $i;
$owner->month = rand(1,12);
$owners[] = $owner;
}
Run Code Online (Sandbox Code Playgroud)
现在,您只需迭代一个平面阵列即可访问所需的数据:
foreach ($owners as $owner) {
var_dump(sprintf('%d.%d: %d', $owner->month, $owner->year, $owner->measure));
}
Run Code Online (Sandbox Code Playgroud)
这个对象数组方法的一个很酷的事情是添加增强功能是多么容易,如果你想添加一个所有者名称怎么办?没问题,只需将成员变量添加到您的类中并稍微修改您的水合作用:
class Owner
{
public $year;
public $measure;
public $month;
public $name;
}
$names = array('Lars', 'James', 'Kirk', 'Robert');
// Demonstrative hydration
for ($i = 1 ; $i <= 3 ; $i++) {
$owner = new Owner();
$owner->year = 2012;
$owner->measure = $i;
$owner->month = rand(1,12);
$owner->name = array_rand($names);
$owners[] = $owner;
}
foreach ($owners as $owner) {
var_dump(sprintf('%s: %d.%d: %d', $owner->name, $owner->month, $owner->year, $owner->measure));
}
Run Code Online (Sandbox Code Playgroud)
你必须记住,上面的代码片段只是建议,如果你坚持使用深度多维数组,那么你必须找出一个对你和你合作的人有意义的元素排序安排,如果你认为你六个月后设置会遇到问题,那么最好在有机会的时候实施更好的策略.