如何键入迭代混合数组的循环
How to type loop that iterates over an array of mixed
鉴于此代码 (https://psalm.dev/r/156e52eb66):
<?php
function keys(): array
{
return ['foo', 'bar'];
}
// no lines above can be changed
foreach (keys() as $k) {
echo gettype($k);
}
假设 keys
函数不受我们控制(在不同的项目中)并且它有效地 returns 一个 mixed
数组(array<array-key, mixed>
).
因此,只能更改循环及其周围。
有可能吗?
如果我做对了,这可能会对你有所帮助:
foreach (array_keys(keys()) as $k) {
echo gettype(keys()[$k])."\n";
}
您可以使用 for
循环而不是 foreach
循环来修复警告。
$keys = keys();
for( $i = 0; $i < count( $keys); $i++ ) {
echo gettype( $keys[$i] );
}
这是诗篇中的linkhttps://psalm.dev/r/20c1cbab73
这是 psalm 的错误。
参考Github: INFO: MixedAssignment - Cannot assign to a mixed type | when using string array key #1281,
并且已被 muglug in this commit 6033345694727d7c3cf84adc76507c3785ed0295
修复
鉴于此代码 (https://psalm.dev/r/156e52eb66):
<?php
function keys(): array
{
return ['foo', 'bar'];
}
// no lines above can be changed
foreach (keys() as $k) {
echo gettype($k);
}
假设 keys
函数不受我们控制(在不同的项目中)并且它有效地 returns 一个 mixed
数组(array<array-key, mixed>
).
因此,只能更改循环及其周围。
有可能吗?
如果我做对了,这可能会对你有所帮助:
foreach (array_keys(keys()) as $k) {
echo gettype(keys()[$k])."\n";
}
您可以使用 for
循环而不是 foreach
循环来修复警告。
$keys = keys();
for( $i = 0; $i < count( $keys); $i++ ) {
echo gettype( $keys[$i] );
}
这是诗篇中的linkhttps://psalm.dev/r/20c1cbab73
这是 psalm 的错误。
参考Github: INFO: MixedAssignment - Cannot assign to a mixed type | when using string array key #1281,
并且已被 muglug in this commit 6033345694727d7c3cf84adc76507c3785ed0295
修复