【问题标题】:get parent array name after array_walk_recursive function在 array_walk_recursive 函数之后获取父数组名
【发布时间】:2013-08-26 15:28:28
【问题描述】:

我使用以下函数来验证搜索词是否在我的文件夹的文件名中。

$files2=list_files("documents/minelli");

Class Commentaire_filter{
      static function test_print($item, $key, $value)
      {
          if (preg_match("#".$value."#", $item))

          {
           $array =  Array($key=>$item);
          print_r($array);
          ?>

          <a href="documents/minelli/<?php echo $item; ?>"><?php echo $key.' '. $item; ?></a><br /> 
          <?php

          }
      }
}


array_walk_recursive($files2, 'Commentaire_filter::test_print',$motrecherche );

我得到一个文件列表。

我想添加一个链接以允许用户下载该文件。

当我使用array_walk_recursive 函数时,我只能获取文件名和密钥。如何获取父数组的名称以建立链接?

这里是我的 $files 的摘录:

数组(大小=5)

'行政' =>

array (size=5)

  0 => string 'campagne-sanmarina.jpg' (length=22)

  1 => string 'COSMO Echantillons ETE 2009.xls' (length=31)

  2 => string 'COSMOPARIS Echantillons MARO Hiver 2011 311-411.xls' (length=51)

  3 => string 'cosmoparis-boutique.jpg' (length=23)

  4 => string 'minelli-20-ans.png' (length=18)

'商务' =>

array (size=4)

  0 => string 'a-gagner-cosmoparis.jpg' (length=23)

  1 => string 'CONTROLE 2009.pdf' (length=17)

  2 => string 'cosmoparis-boutique.jpg' (length=23)

  3 => string 'soldes-cosmoparis.jpg' (length=21)

'Gestion' =>

array (size=1)

  'PROCEDURES' => 

    array (size=5)

      0 => string 'cosmoparis-boutique.jpg' (length=23)

      1 => string 'flux-ecommerce-smc.pdf' (length=22)

      2 => string 'Minelli-Lyon.jpg' (length=16)

      3 => string 'sanmarina-magasin-interieur.jpg' (length=31)

      4 => string 'visuel_chaussures_minelli_printemps_ete_2009.jpg' (length=48)

'Magasins' =>

array (size=2)

  0 => string 'COSMO Echantillons ETE 2009.xls' (length=31)

  1 => string 'san-marina-saint-etienne.jpg' (length=28)

'Ressources Humanes' =>

array (size=7)

  'ACTUALITES PAYE' => 

    array (size=3)

      0 => string 'COSMOPARIS Echantillons MARO Hiver 2011 311-411.xls' (length=51)

      1 => string 'cosmoparis-boutique25.jpg' (length=23)

      2 => string 'minelli-tours.jpg' (length=17)
          ...

对于“cosmoparis-boutique25.jpg”,我想获取父数组名称(“Ressources Humaines”=>“ACTUALITES PAYE”)。我怎样才能获得这些信息来建立一个像'myfolder/Ressources Humaines/ACTUALITES PAYE/cosmoparis-boutique25.jpg 这样的链接?

感谢您的帮助!

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    您将不得不放弃 array_walk_recursive 并滚动您自己的递归遍历。这将允许您在递归时维护或传递自定义状态信息。

    例如:

    function my_walk_recursive(array $array, $path = null) {
        foreach ($array as $k => $v) {
            if (!is_array($v)) {
                // leaf node (file) -- print link
                $fullpath = $path.$v;
                // now do whatever you want with $fullpath, e.g.:
                echo "Link to $fullpath\n";
            }
            else {
                // directory node -- recurse
                my_walk_recursive($v, $path.'/'.$k);
            }
        }
    }
    

    【讨论】:

    • Sad...这需要实现,我发现即使回调传递的数组键也是整数键,而不是关联 - 就像...
    • 对于那些使用 Laravel >=v4.2 的人来说,array_dot() 辅助函数非常方便递归地展平嵌套数组,其中数组项变为 parentKey.childKey =&gt; childValue
    猜你喜欢
    • 2014-08-24
    • 2016-01-07
    • 1970-01-01
    • 2020-11-30
    • 2021-07-28
    • 2019-12-24
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多