【问题标题】:Make 1d Array from 1st member of each value in 2d Array | PHP从二维数组中每个值的第一个成员制作一维数组 | PHP
【发布时间】:2010-11-16 14:35:35
【问题描述】:

你怎么能做到这一点?我在这里看到的代码不起作用

for($i=0;i<count($cond);$i++){
    $cond[$i] = $cond[$i][0];
}

【问题讨论】:

    标签: php arrays multidimensional-array reduce


    【解决方案1】:

    可以这么简单:

    $array = array_map('reset', $array);
    

    【讨论】:

      【解决方案2】:

      如果源数组不是数字索引,则可能会出现问题。试试这个:

      $destinationArray = array();
      for ($sourceArray as $key=>$value) {
          $destinationArray[] = $value[0]; //you may want to use a different index than '0'
      }
      

      【讨论】:

      • 这是真的,但我的数组是数字的 - 错误是我的变量我被引用而没有变量表示符 $
      【解决方案3】:
      // Make sure you have your first array initialised here!
      $array2 = array();
      foreach ($array AS $item)
      {
          $array2[] = $item[0];
      }
      

      假设您以后想拥有相同的变量名,您可以将新数组重新分配回旧数组。

      $array = $array2;
      unset($array2); // Not needed, but helps with keeping memory down
      

      此外,根据数组中的内容,您也许可以执行类似的操作。

      $array = array_merge(array_values($array));
      

      【讨论】:

      • 感谢您的响应,但我不想用完另一个变量名,在 PHP 中,变量应该在读取变量后写入?我想?
      • 是的,但是,因为你已经把它放在一个循环中,它会不会那么混乱。此外,在每次迭代时都会评估 count()。因此,当您向其中添加内容时,这总是会改变的。 PHP中变量名的数量没有限制!您始终可以在循环之后将其分配回原始变量(使用 $array = $array2;)
      • 我发现如果你这样做,你可以在 foreach 循环中“就地”进行更改 - foreach ($myarray as &$item)
      【解决方案4】:

      如前所述,您的代码在各种情况下都无法正常工作。 尝试使用以下值初始化您的数组:

      $cond = array(5=>array('4','3'),9=>array('3','4'));
      

      一个解决方案,对我来说更好的可读性也是以下代码:

      //explain what to do to every single line of the 2d array
      function reduceRowToFirstItem($x) { return $x[0]; }
      
      // apply the trasnformation to the array
      $a=array_map('reduceRowTofirstItem',$cond);
      

      您可以阅读reference for array map 以获得详尽的解释。

      您还可以选择使用array_walk 的细微变化(它在“就地”阵列上运行)。请注意,该函数不返回值,并且他的参数是通过引用传递的。

      function reduceToFirstItem(&$x) { $x=$x[0]; }
      array_walk($cond, 'reduceToFirstItem');
      

      【讨论】:

      • 因为我写的代码是私有的,我可以确定数组总是从零开始的数字,没有间隙。但我确实感谢你的通知,因为我有点跳过了这个想法。
      • 这只是为了指出可能的错误来源。如果你认为你不会重用你的代码,你可以放心地忽略这个建议;)
      【解决方案5】:

      应该可以。为什么它不起作用?你得到什么错误信息? 这是我将使用的代码:

      $inArr;//This is the 2D array
      $outArr = array();
      for($i=0;$i<count($inArr);$i++){
              $outArr[$i] = $inArr[$i][0];
      }
      

      【讨论】:

      • 哦,我明白了问题...也许 i
      • @Supernovah:每个变量,在每次访问它时,都需要在其名称前加上 $ 符号。
      猜你喜欢
      • 2017-10-12
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2022-12-07
      • 2017-08-13
      • 1970-01-01
      相关资源
      最近更新 更多