【发布时间】:2020-06-04 10:26:20
【问题描述】:
我有以下数组结构:
$this->entity += [
$key => [
'column' => $column,
'required' => $required,
'type' => $type,
'value' => $value,
'valueIfNull' => $valueIfNull,
'useDBDefaultWhenNull' => $useDBDefaultWhenNull
]
];
var_dump($this->entity);
array(13) {
["id"]=>
array(6) {
["column"]=>
string(2) "fk_tbl_users_id"
["required"]=>
bool(false)
["type"]=>
array(2) {
[0]=>
string(7) "integer"
[1]=>
int(1)
}
["value"]=>
string(0) ""
["valueIfNull"]=>
string(0) ""
["useDBDefaultWhenNull"]=>
bool(true)
}
["isAdmin"]=>
array(6) {
....
}
}
我需要能够从给定的 $column 值中找到 $key。我尝试了以下方法,但当然不起作用:
$entity_key = array_search('fk_tbl_users_id', $this->entity, true);
我也尝试使用这种结构制作我的 $entity 数组(省略键“列”等):
$this->entity += [
$key => [
$column,
$required,
$type,
$value,
$valueIfNull,
$useDBDefaultWhenNull
]
];
var_dump($this->entity);
array(13) {
["id"]=>
array(6) {
[0]=>
string(2) "fk_tbl_users_id"
[1]=>
bool(false)
[2]=>
array(2) {
[0]=>
string(7) "integer"
[1]=>
int(1)
}
[3]=>
string(0) ""
[4]=>
string(0) ""
[5]=>
bool(true)
}
["isAdmin"]=>
array(6) {
....
}
}
我做错了吗?我假设不是,我能够检索密钥的唯一方法是强制循环我的数组,获取“列”值,将其与 $col 值进行比较,如果为真,则保留 $key 并中断我的循环。像这样的:
private function getKeyname(string $col)
{
foreach ( $this->entity as $key => $value )
{
$key_colname = $value[0]; // or $value['column'], depending on array structure I end up using
if ( $key_colname === $col ) return $key;
}
}
如果可能的话,我宁愿不必循环我的数组并使用 PHP 内置函数?
感谢您的投入!!
拍拍
【问题讨论】:
-
即使使用内置函数,你也会得到循环,现在它会隐藏在引擎盖下。那么,循环有什么问题呢?
-
array_search仅查看数组的顶层,它不会递归地遍历任何子数组。您要查找的值不在顶层,它在id键下的数组内。如果您只想在该键下方搜索,请为函数指定正确的输入数组 -$this->entity['id']。如果您想在所有顶级键下方搜索 - 那么您将不得不遍历这些键,是的。 -
请不要 yatta-yatta 您的输入和所需的输出。 @Pat 使用
var_export()来展示您的数据。清楚你的要求。我不明白你的问题。