我将有几个数组,我想显示为一个表。它们有匹配的键,但是有些可能缺少一些键,有些可能没有其他的键。是否有一种简单的方法将这些数组组合成一个二维数组,不会省略其中一些缺少的元素,也不会折叠数组,使一些值被放置到错误的"列"?
更具体地说,我想知道是否有一个函数是为了这个,或者如果我只需要自己编码。
我将尝试在这里产生的东西作为一个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] =>
)
)
我希望这是你所需要的,这将帮助你解决你的问题。