首页 > 解决方案 > 在php中按索引而不是按值从多维关联数组中的特定索引中搜索所有值

问题描述

在这个论坛的帮助下,我找到了一种方法来获得一个完全适合我的任务的数组。我遇到了一个后续问题:

我得到了以下示例数组

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

字母是索引,我最终得到每个名称的结果数组。现在我正在寻找一种使用特定搜索字符串搜索此数组的方法,并且应该可以从第 3 个字符开始。因此,如果我搜索“ADA”,我想从所有以下结果数组中获取值,这些结果数组将是“ADAM”和“ADAN”,因为它们都遵循 Array['A']['D']['A'] .

我开始在正确的索引处搜索没有任何问题,但我无法找到访问所有“结果”数组的方法。只找到了搜索最终值(ADAM,ADAN)的方法,但正如我所说,我正在从我的搜索点寻找所有可能的最终值。

所以基本上我想从我的搜索字符串的最后一个字符之后的结果数组中获取所有值作为我的数组的索引。希望这个解释能指出我在寻找什么。

提前致谢!

简而言之:

//my Input
$searchstring = 'ADA';

//Output i want

"ADAM",  "ADAN";

//Input
$searchstring = 'ADAM';

//Output

"ADAM"

编辑:我用我的方法编辑了这个问题,因为评论指出我应该这样做(谢谢!)所以我试着这样做:

当我有我的示例数组时,我试图只选择结构的必要部分:

$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 ([结果] => HENNES))))所以我在右边是结构。

然后我试图找到搜索索引“结果”的所有实例的方法。

我发现了以下功能和方法,它们都使我能够搜索特定值而不是索引。

$newArray = array_values($finalsearch);

array-search($searchquery, $finalsearch);

那是我开始转圈的地方

标签: phparrayssearchmultidimensional-arrayassociative-array

解决方案


第一部分是找到列表的起点,这只是循环搜索字符串中的每个字符并移动到数组中的那个值的情况。

找到起点后,您可以使用array_walk_recursive()which 只会访问叶节点 - 所以这只是名称(在这种情况下),所以创建所有这些节点的列表并返回它们......

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
)

推荐阅读