【问题标题】:Build array path构建数组路径
【发布时间】:2020-10-26 05:50:22
【问题描述】:

我正在尝试构建数组路径以减少代码。原因是大约有 50 条长路径,我想减少代码库。 对于“test-2”,变量“$path”可以硬编码,同时右侧的“key-X”应该可以调整,例如用于以后的 for 循环。

问题:

是否可以按照“test-2”中的描述构建数组路径?

想要的结果:

测试 1:60

测试 2:60

<?php

$arrayWithPrettyLongName = [
  'level_1' => [
    'key_1' => 10,
    'key_2' => 20,
    'key_3' => 30,
  ]
];

// Test-1 // Works fine!

$result_1 =
$arrayWithPrettyLongName['level_1']['key_1'] +
$arrayWithPrettyLongName['level_1']['key_2'] +
$arrayWithPrettyLongName['level_1']['key_3'] ;

echo $result_1;

// Test-2 // Throws errors.

$path = "$arrayWithPrettyLongName['level_1']";

$result_2 =
$path . ['key_1'] +
$path . ['key_2'] +
$path . ['key_3'] ;

echo $result_2;

错误

PHP Parse error:  syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in Xxx.php on line 18

【问题讨论】:

  • 如果不使用eval(),我认为"$arrayWithPrettyLongName['level_1']" 并不容易做到,不过stackoverflow.com/questions/1677099/… 中的想法可能会有所帮助。
  • 如果像您拥有的代码一样,您只想将这些值添加到数组array_sum($arrayWithPrettyLongName['level_1']) 中的特定级别中也应该可以工作。

标签: php arrays path php-7.3


【解决方案1】:

像这里一样工作:

    <?php

$arrayWithPrettyLongName = [
  'level_1' => [
    'key_1' => 10,
    'key_2' => 20,
    'key_3' => 30,
  ]
];

// Test-1

$result_1 =
$arrayWithPrettyLongName['level_1']['key_1'] +
$arrayWithPrettyLongName['level_1']['key_2'] +
$arrayWithPrettyLongName['level_1']['key_3'] ;

echo $result_1; //output 60

// Test-2

$path = $arrayWithPrettyLongName['level_1'];

$result_2 =
$path['key_1'] +
$path['key_2'] +
$path['key_3'] ;

echo $result_2; //output 60

?>

你错了$path = "$arrayWithPrettyLongName['level_1']";必须是没有""
另一个变化是$path .必须是$path['key_1'];

【讨论】:

  • 我认为他们不想硬编码变量路径。
  • 是否可以按照“test-2”中的描述构建数组路径? 现在可以使用 test2 输出:)
  • 其实答案是可以的。 "$path" 可以硬编码,同时"$path" 的右侧应该可以调整,例如通过后来的for循环。更新了问题。
【解决方案2】:

我认为您在这里真正想知道的是如何创建数组引用。您可以通过在数组名称前加上 & 符号来做到这一点

<?php

$arrayWithPrettyLongName = [
  'level_1' => [
    'key_1' => 10,
    'key_2' => 20,
    'key_3' => 30,
  ]
];

// Test-1 // Works fine!

$result_1 =
$arrayWithPrettyLongName['level_1']['key_1'] +
$arrayWithPrettyLongName['level_1']['key_2'] +
$arrayWithPrettyLongName['level_1']['key_3'] ;

echo $result_1;
echo "\n";


//Just create an array reference here, by preceding the name with an `&`
$path = &$arrayWithPrettyLongName['level_1'];


//Also remove the `.` symbol here. That's not the correct syntax
$result_2 =
$path['key_1'] +
$path['key_2'] +
$path['key_3'] ;

echo $result_2;

但是看!如果你真的想减少代码,你就不能这样做吗?

$result_3 = 0;
foreach ($arrayWithPrettyLongName['level_1'] as $value){
    $result_3 += $value;
}
echo $result_3;

如果以后数组变大,就省了很多麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多