从几个数组中创建2D数组,这些数组具有匹配的键和可能的遗漏



我将有几个数组,我想显示为一个表。它们有匹配的键,但是有些可能缺少一些键,有些可能没有其他的键。是否有一种简单的方法将这些数组组合成一个二维数组,不会省略其中一些缺少的元素,也不会折叠数组,使一些值被放置到错误的"列"?

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

我将尝试在这里产生的东西作为一个2D数组与类似的问题像你的。假设我们有X个数组,每个数组代表一个人。

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

这里我们有两个person数组,它们具有相似但不同的信息。主要区别在于键姓氏国家,它们在两个数组中都不存在。

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

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

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

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

$arrayKeys = array();              
foreach( $arrays as $value ){
 $thisArrayKeys = array_keys($$value);
 $arrayKeys = array_merge($arrayKeys ,$thisArrayKeys );
 }

创建了一个空数组来存储键arrayKeys。然后使用保存人员信息的变量名数组对数组进行迭代。我们使用双美元符号来获取与数组中值同名的变量。"person" => $"person" => $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] => 
        )
)
我希望这是你所需要的,这将帮助你解决你的问题。

相关内容

  • 没有找到相关文章

最新更新