从具有匹配键的多个数组创建2D数组,可能遗漏

时间:2015-07-16 09:13:58

标签: php arrays multidimensional-array

我想要将一些数组显示为表格。它们具有匹配的键,但有些键可能缺少某些键,有些键可能没有其他键的键。是否有一种简单的方法可以将这些数组合并到一个2D数组中,该数组不会忽略其中某些数组中缺少的元素,也不会折叠数组,以便将某些值放入错误的#34;列中。 ?

更具体地说,我想知道是否有一个功能是为了这个或者我只需要自己编码。

1 个答案:

答案 0 :(得分:1)

我会尝试在这里制作像我们这样类似问题的2D数组。 假设我们有一个X数组,其中每个数组代表一个人。

$person1= array(
 "name" => "Lako",
 "surname" => "Tuts",
 "age" =>25
          );

$person2 = array(
 "name" => "Igor",
 "country" => "Croatia",
 "age" =>25
);

这里我们有两个具有相似但不同信息的人员阵列。主要区别在于密钥 surname country ,这两个数组中都不存在。

我们需要迭代它们,但为了让我们的工作变得更容易,我们可以将它们的变量名称组合在一个数组中,然后我们可以迭代它们。

$arrays = array("person1","person2");

我们可以直接将两个数组保存在变量$ arrays中,但不需要用重复信息填充内存。

我们现在需要知道所有数组中的所有键,以便我们可以检查哪些键存在,哪些键不存在。

$arrayKeys = array();              
foreach( $arrays as $value ){

 $thisArrayKeys = array_keys($$value);

 $arrayKeys = array_merge($arrayKeys ,$thisArrayKeys );

 }

我们制作了一个空数组来存储键 arrayKeys 。然后我们使用包含人员信息数组的变量名称迭代数组。我们使用双美元符号来获取与这些数组中的值具有相同名称的变量。 “人”=> $“person”=> $人

现在我们拥有了所有数组中的所有键,让我们将它们设置为唯一,这样我们就没有重复的键。

$arrayKeys = array_unique($arrayKeys);

我们需要一个新阵列,它将是我们需要的2D阵列,它将保存关于每个人的所有格式化信息。

//the new array
$theNewArray = array();

foreach( $arrays as $value ){
    //get the array info for the person
    //first iteration will be $person1
    $personArray = $$value;

    //for each unique key we have, we will check if the key does exist
    //in the current person array. If it does not exist we then make a 
    //new entry in the array with that key and an empty value
    foreach($arrayKeys as $key){
      if(!array_key_exists($key, $personArray)) {
         $personArray[$key] = "";
      }
    }
    //Now that we have an array filled with missing keys lets sort it by 
    //the keys so that we have each person information with the same key order
    ksort($personArray);

    //Push that person array in the new array
    $theNewArray[] = $personArray;

}

如果你打印变量 theNewArray ,你会得到这个:

Array
(
    [0] => Array
        (
            [age] => 25
            [country] => 
            [name] => Lako
            [surname] => Tuts
        )

    [1] => Array
        (
            [age] => 25
            [country] => Croatia
            [name] => Igor
            [surname] => 
        )

)

我希望这就是您所需要的,这将有助于您解决问题。