PHP ARRAY获取特定值的项目索引

时间:2015-02-21 15:35:11

标签: php arrays

我有以下内容的这两个数组$ fonts ['google']和$ data ['value']:

var_dump ($fonts['google']) outputs
array(4) {
    [0]=> array(3) { ["family"]=> string(7) "ABeeZee" ["variants"]=> array(2) { [0]=> string(7) "regular" [1]=> string(6) "italic" } ["subsets"]=> array(1) { [0]=> string(5) "latin" } } 
    [1]=> array(3) { ["family"]=> string(4) "Abel" ["variants"]=> array(1) { [0]=> string(7) "regular" } ["subsets"]=> array(1) { [0]=> string(5) "latin" } } 
    [2]=> array(3) { ["family"]=> string(13) "Abril Fatface" ["variants"]=> array(1) { [0]=> string(7) "regular" } ["subsets"]=> array(2) { [0]=> string(5) "latin" [1]=> string(9) "latin-ext" } } 
    [3]=> array(3) { ["family"]=> string(8) "Aclonica" ["variants"]=> array(1) { [0]=> string(7) "regular" } ["subsets"]=> array(1) { [0]=> string(5) "latin" } }
}


var_dump ($data['value']) outputs
array(4) {
    ["size"]=>  int(17) 
    ["family"]=>  string(3) "Exo"
    ["style"]=>  string(3) "200"
    ["subsets"]=>  string(5) "latin"
}       

现在我从我的数据库中获得$ data ['value'] ['family'] ='Abel'。

问题:

  • 如何获取给定$ data ['value'] ['family']值的['variants']?
  • 如何获得$ fonts ['value'] ['family']值的子数组$ fonts ['google']中的索引?

1 个答案:

答案 0 :(得分:1)

PHP支持Associative Arrays,它允许您为每个元素使用(字符串)键而不是数字索引。这些数组类似于javascript对象,Objective-C字典,java HashMaps等。 这使得这样的场景很容易。您是否可以控制构建原始数据阵列?如果您可以重构存储,请按以下方式设置数组:

$fonts['google'] = [
    ["ABeeZee"] => [
        ["variants"]=>["regular", "italic"],
        ["subsets"]=>["latin"]
    ],
    ["Abel"] => [
        ["variants"]=>["regular"],
        ["subsets"]=>["latin"]
    ],
    ["Abril Fatface"] => [
        ["variants"]=>["regular"],
        ["subsets"]=>["latin", "latin-ext"]
    ],
    ["Aclonica"] => [
        ["variants"]=>["regular"],
        ["subsets"]=>["latin"]
    ]
]

额外信用:如果你有帖子中的原始数据,你可以转换它:

$newArray = array(); // or just [] in PHP >= 5.3 I believe
foreach($fonts['google'] as $index=>$fontArray) {
    $newArray[$fontArray['family']] = $fontArray;
    // this leaves a redundant copy of the family name in the subarray
    unset $newArray[$fontArray['family']]['family']; // if you want to remove the extra copy
}

然后它变得微不足道。给定字体系列名称,您只需使用系列名称作为数组索引访问$fonts['google'][$fontFamilyName](或$newArray[$fontFamilyName])。