根据键获取数组的索引

时间:2018-11-08 15:27:14

标签: php arrays

我有一个带有索引的数组。索引不是静态的,并且会不断变化。

$fields = [
  11 => array (
    'fieldId' => 'ORStreet',
    'type' => 'TEXT',
    'value' => 'Postbus 52',
  ),
];

上面一个的索引是11。但是有时它变成一个不同的数字。 始终保持不变的一件事是fieldId。我如何只知道字段ID即可获得此数组的索引。

上面的数组是名为“ fields”的主数组的子级。

在我的头上,我有这样的东西:

如果发现带有fieliD => ORStreet的数组,则遍历称为fields的主数组。返回该数组的索引。

如果不可能以这种方式获取索引,我不会介意我是否获得了'value'=>'Postbus52'密钥对。

3 个答案:

答案 0 :(得分:1)

您可以结合使用array_map()array_flip()

ignoreMe

demo中查看结果

答案 1 :(得分:1)

<?php
$arr = [
    [
      'fieldId' => 'ORStreet',
      'type' => 'TEXT',
      'value' => 'Postbus 52',
            ],
    [
      'fieldId' => 'vbnm',
      'type' => 'TEXT',
      'value' => 'Postbus 52',
            ],
    [
      'fieldId' => 'ORStreet',
      'type' => 'TEXT',
      'value' => 'Postbus 52',
    ]                               
    ];
    shuffle($arr);
    foreach ($arr as $key => $value) {
        if(array_key_exists("fieldId", $value) && $value["fieldId"] === "ORStreet"){
            echo $key;
            break;
        }
    }
?>

我已经使用shuffle方法来模拟数组的随机性。然后,我遍历数组以将fieldId与指定值(ORStreet)进行匹配。如果匹配,则循环将终止并显示索引。

另一种方式:

$filteredArr = array_pop(array_filter($arr, function ($a){
  return array_key_exists("fieldId", $a) && $a["fieldId"] === "ORStreet";
}));

答案 2 :(得分:1)

另一种可能性:

$result = array_keys(
    array_combine(array_keys($fields), array_column($fields, "fieldId")),
    "ORStreet"
);

array_column()提取所有fieldId的值,然后array_keys()搜索所需的值,并返回相关的数组键。

请注意,这将返回键数组。如果只需要第一个键,它将以整数形式返回它:

$result = array_search(
    "ORStreet",
    array_combine(array_keys($fields), array_column($fields, "fieldId"))
);