Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于子数组中的值返回父数组键。多维阵列_Php_Arrays - Fatal编程技术网

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',
  )