如何使所有行(数组)包含相同的键集?

时间:2014-02-12 12:14:34

标签: php arrays

我有一组从我的数据库创建的数组,我想转换它们,以便我可以将它们打印到表中。每个阵列都描述了产品的FEATURE和VALUE。但并非所有产品都具有相同的功能。例如:

array("Main Colour"=>"Red","Minor Colour"=>"Blue","Size"=>"Large")
array("Main Colour"=>"Red","Size"=>"Small")

因此,第一个产品具有FEATURE“Minor Color”,但第二个产品没有。我想转换数组,以便它们每个都包含相同的键,即使没有赋值。如下所示。

array("Main Colour"=>"Red","Minor Colour"=>"Blue","Size"=>"Large")
array("Main Colour"=>"Red","Minor Colour"=>"","Size"=>"Small")

我需要(我认为我需要)每个数组的长度相同,这样我就可以遍历每个产品来创建一行,然后遍历每个功能来创建一个列。

可能有数百个产品阵列,所以我正在寻找一些不仅仅是将一个阵列与另一个阵列进行比较的东西。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用array_key_exists然后添加,如果不存在!

广义代码

<?php
$arr1=array("Main Colour"=>"Red","Minor Colour"=>"","Size"=>"Small","Major Colour"=>"Yellow");
$arr2=array("Main Colour"=>"Red");

$allKeys = array_keys($arr1); //<--- Pass the array which has all the keys !

function checkArrHasKey($allKeys,&$arr2) //<---- arg passed as a reference
{
foreach($allKeys as $val)
 {
    if(!array_key_exists($val,$arr2))
    {
        $arr2[$val]='';
    }
}
}
checkArrHasKey($allKeys,$arr2); //<--- Pass the first arg as the $allKeys and second arg as your array
print_r($arr2);

<强> OUTPUT :

Array
(
    [Main Colour] => Red
    [Minor Colour] => 
    [Size] => 
    [Major Colour] => 
)

Demo

答案 1 :(得分:1)

如果您从一开始就不知道整个产品集中存在多少可能的不同功能,那么首先通过阵列中的所有产品以获得全套可能性可能会有所帮助特征

然后,您再次通过数组,对于每个产品 - 如果它没有您的功能列表的某些功能,请将这些功能(带有空字符串值)添加到该产品。

这是代码的样子:

// Assuming that you have $products, which is an array of arrays.
// Each element of $products is an associated array that contains
// various feature-value pairs.
$feature_list = array();
foreach($products as $product) {
  $feature_list = array_unique(array_merge($feature_list, array_keys($product)));
}

foreach($products as &$product) {
  foreach($feature_list as $key) {
    if (!array_key_exists($key, $product)) {
      $product[$key] = '';
    }
  }
}

print_r($products);

当然,这可能不是最佳/有效的做事方式。但它清晰明了。

以下是使用的各种PHP函数的文档链接: