【问题标题】:Retrieving array key from value从值中检索数组键
【发布时间】: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() 来展示您的数据。清楚你的要求。我不明白你的问题。

标签: php arrays key


【解决方案1】:

任何类型的多维数组搜索都将使用循环进行搜索,无论您使用内置函数还是自定义函数。为此,此资源PHP multidimensional array search by value 提供了答案。

【讨论】:

  • 如果您希望通过建议另一个 Stack Overflow 页面来解决问题,那么您不应该回答,您应该标记关闭。
【解决方案2】:

感谢各位的回复!我继续做了我的 getKeyname() 函数。正如一些人提到的,最终内置的 php 函数仍然会循环;)

干杯!帕特

【讨论】:

    猜你喜欢
    • 2020-02-10
    • 2019-08-25
    • 2015-08-07
    • 2011-11-15
    • 2018-12-15
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多