Как я могу получить родительский ключ и значение, если у меня уже есть дочерние значения массива? - PullRequest
0 голосов
/ 24 февраля 2020

Я не могу понять, как получить родительский ключ и значение с помощью значения его дочернего ключа многомерного массива.

У меня есть массив в следующем формате:

[91] => Array
    (
        [description] => Charged
        [boundingPoly] => Array
            (
                [vertices] => Array
                    (
                        [0] => Array
                            (
                                [x] => 244
                                [y] => 438
                            )

                        [1] => Array
                            (
                                [x] => 287
                                [y] => 438
                            )

                        [2] => Array
                            (
                                [x] => 287
                                [y] => 452
                            )

                        [3] => Array
                            (
                                [x] => 244
                                [y] => 452
                            )

                    )

            )

    )

Я получаю и сохраняю значение ключа ['x']:

foreach($array as $box){
     if($box['description']=="Charged"){
            $lbl_row_arr[] = $box['boundingPoly']['vertices'][0]['x'];
     }
}

Так что теперь у меня есть значение «х» в этом примере «244». У меня вопрос, как я могу получить значение ключа «description», если у меня есть значение «x»?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Вы можете использовать in_array с array_column для поиска значений x для каждого поля, возвращая description для этого поля, если найдено значение x:

$x = 244;
foreach ($array as $box) {
    if (in_array($x, array_column($box['boundingPoly']['vertices'], 'x'))) {
        $descr = $box['description'];
        break;
    }
}
if (isset($descr)) {
    echo "found $descr with x = $x\n";
}

Вывод (для вашего примера записи):

found Charged with x = 244

Демонстрация на 3v4l.org

1 голос
/ 24 февраля 2020

Положите description значение одновременно со значением x:

foreach($array as $box){
     if($box['description']=="Charged"){
            $tmp = [
                'value_x' => $box['boundingPoly']['vertices'][0]['x'],
                'descr'   => $box['description'], 
            ];
            $lbl_row_arr[] = $tmp;
     }
}

$x = 244;
echo $lbl_row_arr[array_search($x,array_column($lbl_row_arr,'value_x'))]['descr'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...