Поиск всех значений из указанного c индекса в многомерном ассоциативном массиве в php по индексу, а не по значению - PullRequest
0 голосов
/ 09 марта 2020

с помощью этого форума я нашел способ получить массив, который идеально подходит для моей задачи. Я столкнулся с последующей проблемой tho:

Я получил следующий массив-пример

Array ( 
[A] => Array (
 [D] => Array (
  [A] => Array (
   [M] => Array (
    [result] => ADAM )
   [N] => Array (
    [result] => ADAN )
      )
    )
  )  
  [H] => Array (
   [E] => Array (
    [N] => Array (
     [R] => Array (
      [Y] => Array (
       [result] => HENRY )
       )
    [N] => Array (
     [E] => Array (
      [S] => Array (
       [result] => HENNES )
           )
         )
       )
     )
   )
 )

Где Letters являются индексами, и я получаю массив результатов для каждого имени. Теперь я ищу способ поиска в этом массиве с указанием c строки поиска, и это должно быть возможно начиная с 3-го символа. Поэтому, если я ищу 'ADA', я хочу получить значение из всех следующих массивов результатов, которые будут "ADAM" и "ADAN", как оба следуют в массиве ['A'] ['D'] ['A'] .

У меня не было проблем с поиском по правильному индексу, но я не могу найти способ получить доступ ко всем массивам «результата». Только нашел способы поиска окончательного значения (ADAM, ADAN), но, как указано, я искал все возможные значения из моей точки поиска.

Так что в основном я хочу получить все значения из массивов результатов, следующих за последним символом из моей строки поиска в качестве индекса моего массива. Надеюсь, это объяснение указывает на то, что я ищу.

Заранее спасибо!

Короче говоря:

//my Input
$searchstring = 'ADA';

//Output i want

"ADAM",  "ADAN";

//Input
$searchstring = 'ADAM';

//Output

"ADAM"

РЕДАКТИРОВАТЬ: я редактировал этот вопрос с моим подходом, насколько комментарий указал, что я должен сделать это (спасибо за это!), поэтому я попытался go следующим образом:

Когда у меня был мой Example-Array, я пытался выбрать только необходимую часть структуры:

$searchquery = 'HEN';
//Searchquery as Array
$check = str_split($searchquery);
//second isntance of the original array which is named $result
$finalsearch = $result;
foreach($check as $key) {
    $finalsearch = $finalsearch[$key];
}
//check with output if i selected the right area
print_r($finalsearch);

Вывод, который я получил из этого: Array ([R] => Array ([Y] => Array ([result] => HENRY)) [N] => Array ([E] => Array ([S] => Array ([result] => HENNES)))) Так что я нахожусь в правой части структуры.

Затем я попытался найти способы поиска всех экземпляров индекса 'result'.

Я нашел следующие функции и подходы, которые позволили мне искать конкретное c значение, но не индексы.

$newArray = array_values($finalsearch);

array-search($searchquery, $finalsearch);

Это была точка, в которой я начал крутиться кругами

Ответы [ 2 ]

1 голос
/ 09 марта 2020

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

Как только вы нашли начало точка, вы можете использовать array_walk_recursive(), который будет посещать только конечные узлы - так что это будут только имена (в данном случае), поэтому создайте список всех этих узлов и верните их ...

function getEntry ( array $result, string $search )  {
    for($i = 0; isset($search[$i]); $i++){
        $result = $result[$search[$i]];
    }
    $output = [];
    array_walk_recursive($result, function ( $data ) use (&$output)   {
        $output[] = $data;
    });
    return $output;
}

$searchstring = 'ADA';
print_r(getEntry($result, $searchstring));

что должно дать ...

Array
(
    [0] => ADAM
    [1] => ADAN
)
0 голосов
/ 09 марта 2020

Этот сценарий сначала перебирает ключи, содержащие символы $searchstring, и, если он нашел его и не было выдано никаких ошибок, он рекурсивно обходит массив, чтобы найти все ключи result, чтобы добавить его в массив $result , После этого он развертывает массив $result и выводит его на экран.

$searchstring = 'HE';

for( $i = 0; $i < strlen( $searchstring ); $i++ )  {
  $sub = @( isset( $sub ) ? $sub[$searchstring[$i]] : $array[$searchstring[$i]] ) 
         or die( 'no results found' );
}

array_walk_recursive( $sub, function( $value ) use ( &$results )  {
  $results[] = $value;
});

echo implode( ', ', $results );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...