如果子值匹配某事,Cakephp Hash返回键

时间:2018-02-21 23:09:56

标签: cakephp hash

我从未真正使用过Cakephp Hash实用程序类,如果这是一个简单的问题,那就很抱歉。我正在网上阅读文档,我不确定自己是否可以做我想做的事。

如果子值匹配某些内容,是否可以使用Hash返回路径中的一个值。例如,如果我有一个数组

$test_array = [123 => ['name' => 'foo'], 234 => ['name' => 'bar']];

我希望返回123或234,具体取决于我测试的'name'的值,我可以使用类似下面的代码来获取密钥吗?

$return_value = Hash::extract($test_array, '{n}.[text=/foo/]');

1 个答案:

答案 0 :(得分:0)

我自己找到了一个答案,它不像我想的那么灵活,但它适用于我的特定情况。

//initial array
$test_array = [123 => ['name' => 'foo'], 234 => ['name' => 'bar']];

//convert to collection
$test_collection = collection($test_array);

//filter collection to get only what we want
$collection_filtered = $test_collection->match(['name' => 'bar']);

//convert collection back to array [234 => ['name' => 'bar']]
$collection_to_array = $collection_filtered->toArray();

//use php functions array_keys() and reset() to get the appropriate value
$key = reset(array_keys($collection_to_array));

echo $key; //$key = 234

//can also be written in one line like so
$key = reset(array_keys(collection($test_array)->match(['name' => 'bar'])->toArray()));