PHP ARRAY获取某个值的项的索引


PHP ARRAY get index of item for certain value

我有这两个数组$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"]值的["variations"]
  • 如何获取$data['value']['family']值所在的子数组的$fonts['gogle']索引

PHP支持关联数组,允许您为每个元素使用(字符串)键而不是数字索引。这些数组类似于javascript对象、Objective-C字典、javaHashMaps等。这使得这样的场景变得容易。您是否可以控制构建原始数据阵列?如果你可以重构你的存储,那么设置这样的阵列:

$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])。