Как искать индекс во всех столбцах многомерного массива - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь получить индекс многомерного массива во всех столбцах вложенных массивов.Пример:

 $array = 
 [ 
      "int" => [80,85,66],
      "text" => [57,58],
      "varchar" => [82,72,70],
      "decimal" => [60,61]
 ];

Я хочу найти функцию в php (в сочетании), чтобы получить tpye из Id следующим образом:

с 61 возвратом "deicmal" (индекс) с 58 возвратом "text "

Но только в сочетании с основными функциями массива php, без циклов

Ответы [ 4 ]

0 голосов
/ 05 февраля 2019

Если вы не против foreach, вы можете просто пройти через свой массив и каждый вложенный массив, пока не сопоставите свой элемент.

<?php
$array = 
[ 
    "int"     => [80,85,66],
    "text"    => [57,58],
    "varchar" => [82,72,70],
    "decimal" => [60,61]
];

function find_type($needle, $array)
{
    foreach($array as $type => $sub)
        foreach($sub as $int)
            if($int == $needle) return $type;
}

echo find_type(60, $array);

Вывод:

 decimal
0 голосов
/ 04 февраля 2019

Со ссылкой на комментарий из документации php ссылка .

$array = 
[ 
      "int" => [80,85,66],
      "text" => [57,58],
      "varchar" => [82,72,70],
      "decimal" => [60,61]
];
function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}

echo recursive_array_search(61,$array); // decimal
echo recursive_array_search(58,$array); // text
0 голосов
/ 04 февраля 2019

Здесь мы фильтруем исходный массив, чтобы он содержал только те массивы, которые содержат искомый номер.Затем мы просто получаем ключ этого оставшегося элемента.(Предполагая, что все ваши номера уникальны.)

<?php

$array = 
[ 
    "int" => [80,85,66],
    "text" => [57,58],
    "varchar" => [82,72,70],
    "decimal" => [60,61]
];

$target = 70;
$filtered = array_filter($array, function($v) use ($target) {
    return in_array($target, $v);
});

echo key($filtered);

Вывод:

varchar
0 голосов
/ 04 февраля 2019

Я не совсем уверен, что вы хотите, но вы можете проверить это решение:

<?php

$array =
[
    "int" => [80,85,66],
    "text" => [57,58],
    "varchar" => [82,72,70],
    "decimal" => [60,61]
];

getTypeFromId(61, $array);

function getTypeFromId($index, $array) {
    foreach ($array as $k => $v) {
        if (in_array($index, $v)) {
            echo "With " . $index . " return " . $k;
        }
    }
}

Результат:

With 61 return decimal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...