Php 基于子数组中的值返回父数组键。多维阵列
我有一个像这样的数组Php 基于子数组中的值返回父数组键。多维阵列,php,arrays,Php,Arrays,我有一个像这样的数组 Array ( [child-safety-lock] => Array ( [0] => Array ( [id] => 652 [name] => CHILD LOCK (YES/NO) ) [1] => Array
Array
(
[child-safety-lock] => Array
(
[0] => Array
(
[id] => 652
[name] => CHILD LOCK (YES/NO)
)
[1] => Array
(
[id] => 336
[name] => CHILD LOCK (YES/NO)
)
[2] => Array
(
[id] => 19
[name] => Child Lock
)
[3] => Array
(
[id] => 398
[name] => CHILD LOCK (YES/NO)
)
[4] => Array
(
[id] => 155
[name] => CHILD SAFETY LOCK
)
[5] => Array
(
[id] => 329
[name] => CHILD LOCK
)
[6] => Array
(
[id] => 96
[name] => CHILD LOCK
)
[7] => Array
(
[id] => 184
[name] => CHILD SAFETY LOCK
)
[8] => Array
(
[id] => 875
[name] => CHILD SAFETY LOCK (YES/NO)
)
[9] => Array
(
[id] => 450
[name] => CHILD LOCK (YES/NO)
)
[10] => Array
(
[id] => 149
[name] => CHILD SAFE LOCK
)
[11] => Array
(
[id] => 374
[name] => CHILD LOCK (YES/NO)
)
[12] => Array
(
[id] => 491
[name] => CHILD LOCK (YES/NO)
)
[13] => Array
(
[id] => 622
[name] => CHILD LOCK (YES/NO)
)
[14] => Array
(
[id] => 1309
[name] => CHILD LOCK (YES/NO)
)
[15] => Array
(
[id] => 1336
[name] => CHILD LOCK (YES/NO)
)
[16] => Array
(
[id] => 1466
[name] => CHILD LOCK (YES/NO)
)
[17] => Array
(
[id] => 1577
[name] => CHILD SAFETY LOCK (YES/NO)
)
[18] => Array
(
[id] => 1715
[name] => CHILD SAFETY LOCK (YES/NO)
)
[19] => Array
(
[id] => 1908
[name] => CHILD LOCK (YES/NO)
)
)
[controls] => Array
(
[id] => 84
[name] => CONTROLS (E.G. TOUCH, DIAL )
)
[turntable-mm] => Array
(
[id] => 77
[name] => TURNTABLE SIZE (MM)
)
[display-type] => Array
(
[id] => 78
[name] => DISPLAY (E.G. LED, LCD, TFT ETC)
)
[smart-inverter-technology] => Array
(
[id] => 83
[name] => SMART INVERTER TECHNOLOGY
)
[power-w] => Array
(
[id] => 80
[name] => POWER LEVEL (W)
)
[capacity-l] => Array
(
[id] => 79
[name] => CAPACITY (L)
)
[steam] => Array
(
[id] => 86
[name] => STEAM FUNCTION
)
[grill-function] => Array
(
[id] => 89
[name] => GRILL FUNCTION
)
[sensor-cook] => Array
(
[id] => 91
[name] => SENSOR COOK
)
[quick-start] => Array
(
[id] => 92
[name] => QUICK START
)
[defrost-function] => Array
(
[id] => 93
[name] => DEFROST
)
[keep-warm-function] => Array
(
[id] => 97
[name] => KEEP WARM
)
[time-remaining-display] => Array
(
[id] => 98
[name] => TIME REMAINING DISPLAY
)
[reheat-function] => Array
(
[id] => 95
[name] => REHEAT
)
[optional-trim-kit] => Array
(
[id] => 99
[name] => TRIM KIT
)
)
例如,如果输入652
或336
,如何返回钥匙“儿童安全锁”?另一个例子是,如果输入id“84”,则返回数组键“controls”?我尝试使用array_filter()进行此操作,但无法使其正常工作,是否有人可以为我指出正确的方向
也有此功能,但不起作用
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict)!==FALSE)) {
return key($haystack);
}
}
return false;
}
以下各项应起作用:
// Reconstruct array to simplify
$temp = [];
foreach ($arr as $key => $val) {
$temp[$key] = $val[0];
}
// extract key & required values to a temporary array
$temp = array_combine(array_keys($temp), array_column($temp, 'id'));
// look for the values and extract the key
$key = array_search(84, $temp);
参考-
创建单独的阵列并通过索引访问:
$data = [
'child-safety-lock' => [
['id' => 652, 'name' => 'CHILD LOCK (YES/NO)'],
['id' => 336, 'name' => 'CHILD LOCK (YES/NO)'],
['id' => 19, 'name' => 'Child Lock'],
],
'controls' => [
'id' => 84, 'name' => 'CONTROLS (E.G. TOUCH, DIAL )'
]
];
$childSafetyLock = array_column($data['child-safety-lock'], 'name', 'id');
$controls = array_column([$data['controls']], 'name', 'id');
var_dump(
$childSafetyLock[652],
$childSafetyLock[336],
$controls[84],
);
或更通用的解决方案:
$data = [
'child-safety-lock' => [
['id' => 652, 'name' => 'CHILD LOCK (YES/NO)'],
['id' => 336, 'name' => 'CHILD LOCK (YES/NO)'],
['id' => 19, 'name' => 'Child Lock'],
],
'controls' => [
'id' => 84, 'name' => 'CONTROLS (E.G. TOUCH, DIAL )'
]
];
$preparedData = [];
foreach ($data as $key => $value) {
$preparedData[$key] = (count($value) === count($value, COUNT_RECURSIVE))
? [$value]
: $value;
}
$groupedData = [];
foreach ($preparedData as $key => $value) {
$groupedData[$key] = array_column($value, 'name', 'id');
}
var_dump(
$groupedData['child-safety-lock'][652],
$groupedData['child-safety-lock'][336],
$groupedData['controls'][84],
);
如果只有一个键具有多个子数组项,并且所有这些ID都是唯一的,则可以将ID映射到键:
<?php
$data =
[
'biscuits' => [
[
'id' => 3,
'name' => 'Digestive'
],
[
'id' => 4,
'name' => 'Rich tea'
]
],
'cake' =>
[
'id' => 5,
'name' => 'Victoria'
]
];
foreach($data as $k => $item) {
if($k == 'biscuits') {
foreach($item as $biscuit) {
$id_key[$biscuit['id']] = $k;
}
}
else {
$id_key[$item['id']] = $k;
}
}
var_export($id_key);
添加了更多的问题。嗨,只有在有多子数组的情况下才有效
array (
3 => 'biscuits',
4 => 'biscuits',
5 => 'cake',
)