【问题标题】:Accessing the nth element in multidimensional array访问多维数组中的第 n 个元素
【发布时间】:2013-09-17 20:33:53
【问题描述】:

有没有一种简单的方法可以在php中访问多维数组中的第n个元素?

例如

$arr = array( 
[0] => array(1,4,7,3,53),
[6] => array(6,3,9,12,51,7),
[2] => array(9,94,54,3,87));

第 12 个元素是 9。

数组键不一定是按顺序排列的,每个数组行的长度也不一定相同。

【问题讨论】:

  • 不。您必须手动编写代码。
  • 为什么不呢? call_user_func_array('array_merge', $array)[12]。完成。
  • @elclanrs 是call_user_func_array('array_merge', $array)[11]:)
  • 扁平化可能会做大量工作(然后将其丢弃)以获得真正可疑的好处。如果目标是单行,只需将代码放入函数中即可。

标签: php multidimensional-array


【解决方案1】:

试试这个:

<?php
    $arr = array( 
     '0'=> array(1,4,7,3,53),
     '6'=>array(6,3,9,12,51,7),
     '2'=>array(9,94,54,3,87)
    );
    $newArray=array();
    foreach($arr as $array){

    $newArray=array_merge($newArray, $array);
    }
    echo $newArray[11];
?>

【讨论】:

    【解决方案2】:

    未经测试,应该可以工作...

    $arr = array( 
    0 => array(1,4,7,3,53),  // your code was wrong here
    6 => array(6,3,9,12,51,7),
    2 => array(9,94,54,3,87));
    
    function getnth ($array, $offset) {
        $tmp_arr = array();
        foreach ($array as $key => $value) {
            foreach ($value as $val) {
            $tmp_arr[] = $val;
            }
        }
        return (isset($tmp_arr[$offset -1]) ? $tmp_arr[$offset -1] : FALSE);
    }
    
    getnth($arr, 12);
    

    编辑:不得不承认,array_merge 版本更好......

    Edit2:如果性能有问题,这可能会更快......

    function getnth($array, $offset) {
        $i = 0;
        foreach ($array as $key => $value){
            $size = count($value);
            $i += $size;
            if($offset <= $i) {
                $new_off = $size - ($i - $offset) -1 ;
                return $value[$new_off];
            }
        }
        return FALSE;
    }
    

    【讨论】:

      【解决方案3】:
      function get_item($arr, $path, $delim = '.') {
          $path = explode($delim, $path);
          $result = $arr;
          foreach ($path as $item) {
              if (isset($result[$item])) {
                  $result = $result[$item];
              } else {
                  return null;
              }
          }
          return $result;
      }
      

      使用:

      echo get_item($arr, 'item.value.3.4.2.etc');
      

      【讨论】:

      • 这与问题无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2023-03-11
      • 1970-01-01
      • 2021-12-27
      • 2020-09-06
      • 1970-01-01
      • 2013-09-21
      相关资源
      最近更新 更多