【问题标题】:Push items to associative array individually in php在php中将项目单独推送到关联数组
【发布时间】:2018-07-16 05:14:39
【问题描述】:

我有一个喜欢的sn-p,

假设不同长度的数组,例如,

$name1Array 的长度为 8,$name2Array 的长度为 5

    for($i = 0; $i < count ( $name1Array ); $i ++)
    {
        $finalArray ["something"] [] = array (
                "name1" => $name1Array [$i],
                "name2" => $name2Array [$i] 
        );

    }

上面的 sn-p 一切正常,但是当 $name1Array 和 $name2Array 的长度不同时呢?我为每一个都尝试了 2 个 for 循环,

for($i = 0; $i < count ( $name1Array ); $i ++)
    {
        $finalArray ["something"] [] = array (
                "name1" => $name1Array [$i]

        );

    }

for($i = 0; $i < count ( $name2Array ); $i ++)
    {
        $finalArray ["something"] [] = array (
                "name2" => $name2Array [$i]

        );

    }

这没有用,有什么解决办法吗?

【问题讨论】:

  • 将键名“something”更改为其他任何内容以维护两个数组,或显示您的预期结果
  • @Mann 请通过包含一些导致您的问题的示例数据来澄清您的问题,然后从示例输入中说明您的确切预期输出。这使您的问题更加清晰,并提高了您获得高质量解决方案的机会。
  • @Mann 是否要在一个数组的值用完时存储空值——以保留数据的来源?

标签: php arrays multidimensional-array


【解决方案1】:

Sollition 之一是 从数组和循环中查找 Max Count 值,直到最大数组 val。

<?php

$array1 = array("a","b","c","d");
$array2 = array("1","2","3","4","5");

$count1 = count ( $array1 );$count2 = count ( $array2 );
$looptill = max($count1,$count2);

for($i = 0; $i < $looptill ; $i ++)
    {
        $finalArray ["something"] [] = array (
                "name1" => $array1 [$i],
                "name2" => $array2 [$i] 
        );

    }

echo "<pre>";
print_r($finalArray);
exit;

【讨论】:

    【解决方案2】:

    不清楚您的预期结果应该是什么,所以我在这里猜测您希望通过使用null 或另一个空值填充缺失值来获得最长可能的结果。

    试试这个:

    $c1 = count($name1Array);
    $c2 = count($name2Array);
    $cmax = max($c1, $c2);
    
    for ($i = 0; $i < $cmax; $i++)
    {
        $finalArray["something"][] = [
            "name1" => $i < $c1 ? $name1Array[$i] : null,
            "name2" => $i < $c2 ? $name2Array[$i] : null
        ];
    }
    

    作为替代方案,您可能希望通过省略两个数组中都不存在的结果来获得最短的结果:

    $c1 = count($name1Array);
    $c2 = count($name2Array);
    $cmin = min($c1, $c2);
    
    for ($i = 0; $i < $cmin; $i++)
    {
        $finalArray["something"][] = [
            "name1" => $name1Array[$i],
            "name2" => $name2Array[$i]
        ];
    }
    

    您没有指定您需要两个(最长/最短)版本中的哪一个,这表明您没有仔细考虑问题并且可能只是在做功课......无论如何,您只是用这种方式伤害自己。

    【讨论】:

      【解决方案3】:

      如果您希望推送原始数组中缺少的 null 元素,array_map() 是直接单行:

      $array1 = array(1, 2, 3, 4, 5, 6, 7, 8);
      $array2 = array('a', 'b', 'c', 'd', 'e');
      
      $finalArray['something'] = array_map(function($v1, $v2){return ['name1' => $v1, 'name2' => $v2];}, $array1, $array2);
      var_export($finalArray);
      

      *array_map() 您是否愿意在输入数组过期时提供null 值。

      如果您不想看到任何 null 值,for() 循环可能是更好的选择:

      for ($i = 0, $max = max(sizeof($array1), sizeof($array2)); $i < $max; ++$i) {
          $tmp = [];
          if (isset($array1[$i])) {            // this condition is important to avoid Notices
              $tmp['name1'] = $array1[$i];
          }
          if (isset($array2[$i])) {            // this condition is important to avoid Notices
              $tmp['name2'] = $array2[$i];
          }
          $final['something'][] = $tmp;
      }
      var_export($final);
      

      Here is a demonstration.

      【讨论】:

        猜你喜欢
        • 2011-03-13
        • 1970-01-01
        • 2015-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多