php 从关联数组的关联数组中的限定行获取键(不是索引

3pmvbmvn  于 2023-02-21  发布在  PHP
关注(0)|答案(4)|浏览(175)

下面是我的数组:

$array = [
    'key1' => [
        'first' => 'azerty',
        'second' => 'qwerty'
    ],
    'key2' => [
        'first' => 'hello',
        'second' => 'world'
    ]
];

对于值“qwerty”,我想检索“key1”。
我在找这样的东西:

$theKeyIWant = array_search('qwerty', array_column($array, 'second'));

但是我得到的是'0',而不是'key1'(我知道这就是它的工作原理)
有人知道如何修改这段代码或者知道另一段代码来获取键值吗?

t40tm48m

t40tm48m1#

稍微修改代码以合并键和列值:

$theKeyIWant = array_search('qwerty', array_combine(array_keys($array), array_column($array, 'second')));
brtdzjyr

brtdzjyr2#

为这个任务寻找"更性感的东西"的问题在于,如果"性感"意味着"函数迭代器",那么代价就是不能"早返回"(做不必要的循环)。
如果你想调用一个单行函数,你可以构建自己的函数,并把它放在你项目的某个helpers文件中,我强烈建议你放弃"sexy",使用一个可破坏的foreach循环。
代码:(Demo

function getRowKey($array, $column, $value) {
    foreach ($array as $key => $row) {
        if ($row[$column] === $value) {
            return $key;
        }
    }
    return null;
}

var_export(getRowKey($array, 'second', 'qwerty'));

如果您要对同一个数组执行重复搜索,并且第二列保证包含唯一值,那么您可以将该数组转换为查找数组,而不会丢失任何数据。(Demo

function restructure($array, $columnToKey) {
    $result = [];
    foreach ($array as $key => $row) {
        $result[$row[$columnToKey]] = $row + ['oldKey' => $key];
    }
    return $result;
}

var_export(restructure($array, 'second')['qwerty']);
cfh9epnr

cfh9epnr3#

要解决这个问题,可以循环遍历外部数组,并使用**array_search()**在每个内部数组中搜索值。

$value = 'qwerty';
$theKeyIWant = null;

foreach ($array as $key => $innerArray) {
  if (array_search($value, $innerArray) !== false) {
    $theKeyIWant = $key;
    break;
  }
}

echo $theKeyIWant; // Output: key1
xa9qqrwz

xa9qqrwz4#

array_keys返回数组的键数组。

<?php

$array = [
'key1' => [
    'first' => 'azerty',
    'second' => 'qwerty'
],
'key2' => [
    'first' => 'hello',
    'second' => 'world'
]
];
$theKeyIWant = array_search('qwerty', array_column($array, 'second'));
echo array_keys($array)[$theKeyIWant];
?>

3V4l

相关问题