简体   繁体   English

从多维数组获取元素

[英]Get elements from Multidimensional array

i have an array with this structure 我有这种结构的数组

$font = Array
(
["family"] => ABeeZee
["category"] => sans-serif
["variants"] => Array
    (
        [0] => regular
        [1] => italic
    )

["subsets"] => Array
    (
        [0] => latin
    )

)

i want to get the elements like $family = ABeeZee ,$variants = regular, italic 我想获取诸如$ family = ABeeZee ,$ variants =常规,斜体的元素

Please have a look attached snippet. 请查看附加的代码段。

Check it over here. 在这里检查。 https://eval.in/600521 https://eval.in/600521

<?php
$arr=array(
"family" => 'ABeeZee',
"category" => "sans-serif",
"variants" => array("regular","italic"),
"subsets" => array("latin"));
foreach($arr as $key=>$arr){
    if(is_array($arr)){
        echo "$".$key ."=". implode(",",$arr);
    }else{
        echo "$".$key ."=". $arr;
    }
    echo "<br>";
}
?>

Above snippet will return following output. 以上代码段将返回以下输出。

$family=ABeeZee
$category=sans-serif
$variants=regular,italic
$subsets=latin

See this one 看到这个

<?php
 $arr=array(
 "family" => 'ABeeZee',
 "category" => "sans-serif",
 "variants" => array("regular","italic"),
 "subsets" => array("latin")
 );
 $family =  $arr['family'];
 $variants = '';
 foreach($arr['variants'] as $val){
  if($variants != ''){
   $variants = $variants.',';
   }
  $variants = $variants.$val;
 }
echo $family.PHP_EOL;
echo $variants;
?>

I assume you want to search your array for elements that match certain criteria. 我假设您要在数组中搜索符合特定条件的元素。

I've included a method to search for fonts by variant or variants. 我提供了一种按变体或变体搜索字体的方法。

<?php
$fonts =
[
    [
        'family'   => 'Foo',
        'category' => 'sans-serif',
        'variants' =>
            [
                'regular',
                'italic'
            ]
    ],
    [
        'family'   => 'Bar',
        'category' => 'cursive',
        'variants' =>
            [
                'regular',
                'bold'
            ]
    ],
    [
        'family'   => 'Baz',
        'category' => 'monospace',
        'variants' =>
            [
                'italic',
                'regular',
                'bold'
            ]
    ]
];


// Build some indexes for search functions.
$family_index   = [];
$variants_index = [];
foreach($fonts as $index => $font) {
    $family_index[$font['family']] = $index;
    foreach($font['variants'] as $variant) {
        $variants_index[$variant][] = $index;
    }
}

$filter_by_family = function($family) use ($fonts, $family_index) {
    return isset($family_index[$family]) ? $fonts[$family_index[$family]] : null;
};

$filter_by_variants = function(array $variants) use ($fonts, $variants_index) {
    $font_index_matches = array();
    foreach($variants as $variant) {
        if(isset($variants_index[$variant])) {
            $font_index_matches[] = $variants_index[$variant];
        }
    }

    if(!count($font_index_matches)) return;

    $matches = count($font_index_matches) > 1 
        ? call_user_func_array('array_intersect', $font_index_matches)
        : $font_index_matches[0];

    return array_intersect_key($fonts, array_flip($matches));
};

var_dump($filter_by_family('Bar'));
var_dump($filter_by_variants(['italic']));
var_dump($filter_by_variants(['regular','bold']));

Output: 输出:

array (size=3)
  'family' => string 'Bar' (length=3)
  'category' => string 'cursive' (length=7)
  'variants' => 
    array (size=2)
      0 => string 'regular' (length=7)
      1 => string 'bold' (length=4)
array (size=2)
  0 => 
    array (size=3)
      'family' => string 'Foo' (length=3)
      'category' => string 'sans-serif' (length=10)
      'variants' => 
        array (size=2)
          0 => string 'regular' (length=7)
          1 => string 'italic' (length=6)
  2 => 
    array (size=3)
      'family' => string 'Baz' (length=3)
      'category' => string 'monospace' (length=9)
      'variants' => 
        array (size=3)
          0 => string 'italic' (length=6)
          1 => string 'regular' (length=7)
          2 => string 'bold' (length=4)
array (size=2)
  1 => 
    array (size=3)
      'family' => string 'Bar' (length=3)
      'category' => string 'cursive' (length=7)
      'variants' => 
        array (size=2)
          0 => string 'regular' (length=7)
          1 => string 'bold' (length=4)
  2 => 
    array (size=3)
      'family' => string 'Baz' (length=3)
      'category' => string 'monospace' (length=9)
      'variants' => 
        array (size=3)
          0 => string 'italic' (length=6)
          1 => string 'regular' (length=7)
          2 => string 'bold' (length=4)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM