Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过子数组值从数组中获取值?_Php - Fatal编程技术网

Php 如何通过子数组值从数组中获取值?

Php 如何通过子数组值从数组中获取值?,php,Php,我有个大问题。不知何故,我需要根据子数组的值从数组中获取变体\u id: $array = [ [ 'attributes' => [ 'attribute_art-der-karte' => 'Rot' ], 'variation_id' => '222' ], [ 'attributes' => [ 'attribute_ar

我有个大问题。不知何故,我需要根据子数组的值从数组中获取
变体\u id

$array = [
    [
        'attributes'   => [
            'attribute_art-der-karte' => 'Rot'
        ],
        'variation_id' => '222'
    ],
    [
        'attributes'   => [
            'attribute_art-der-karte' => 'Green'
        ],
        'variation_id' => '221'
    ]
];
所以在我的例子中,我有两件事可以做:

  • 钥匙
    属性\u art-der-karte
  • Rot

  • 我在这里没有找到任何东西,只有一个分类。有什么想法吗?谢谢

    您可以使用
    foreach

    // One way using loops identify the non-array element
    foreach($array as $ele){
        if(!is_array($ele)){
            print_r($ele);
        }
    }
    
    // Otherway for direct calling
    print_r($array['variation_id']);
    

    只要在数组上循环,并在满足条件时返回变体ID(存在具有给定键和给定值的属性):


    使用
    array\u search()
    array\u column()
    的附加选项:


    您还可以为此使用数组过滤器

    <?php
    $array = [
        [
            'attributes'   => [
                'attribute_art-der-karte' => 'Rot'
            ],
            'variation_id' => '222'
        ],
        [
            'attributes'   => [
                'attribute_art-der-karte' => 'Green'
            ],
            'variation_id' => '221'
        ]
    ];
    
    function findByAttribute ($arr, $value) {
        $result = array_filter($arr, function($elem) use($value){
         return $elem['attributes']['attribute_art-der-karte'] == $value;
        });
        
        if ($result) {
           return array_shift($result)['variation_id'];
        }
        return '';
    }
    
    var_dump(findByAttribute($array, 'Rot')); // gives '222'
    var_dump(findByAttribute($array, 'a')); // returns ''
    var_dump(findByAttribute($array, 'Green')); // gives 221
    

    到目前为止您尝试了什么?你有足够的声誉,你知道发布一个好问题的准则。请添加缺少的details@AlivetoDie没什么,因为我不知道这是否可能。我做了一些研究,但没有任何结果。这就是我在这里问的原因。如果你看一下我的其他问题,我以前有想法的时候总是发布我的尝试。你尝试过在数组上使用
    foreach()
    循环吗?@NigelRen是的,但是我如何使用这个?我的意思是,当我在它上面循环时,我只能得到子数组,但是如何使用该值作为它之外的项的引用?@Mr.Jo我的问题是在你的数组中多个
    Rot
    可以在那里吗?有没有可能?请更新它将只在7.0以上工作。@AlivetoDie考虑到7.2以上的版本不再受支持,我认为默认提供与PHP 7.3+兼容的答案是合乎逻辑的。OP应该提到,如果他使用的是旧版本(这里似乎不是这样)。Jeto我还是觉得最好指出这一点,以防我的答案不适用于较低版本。
    <?php 
    
    $array = [
        ['attributes' => ['attribute_art-der-karte' => 'Rot'], 'variation_id' => '222'],
        ['attributes' => ['attribute_art-der-karte' => 'Green'], 'variation_id' => '221']
    ];
    
    $key = array_search (
        'Rot', 
        array_column(array_column($array, 'attributes'), 'attribute_art-der-karte')
    );
    echo "variation_id: ". (($key === false) ? 'Not found' : $array[$key]["variation_id"]);
    
    ?>
    
    variation_id: 222
    
    <?php
    $array = [
        [
            'attributes'   => [
                'attribute_art-der-karte' => 'Rot'
            ],
            'variation_id' => '222'
        ],
        [
            'attributes'   => [
                'attribute_art-der-karte' => 'Green'
            ],
            'variation_id' => '221'
        ]
    ];
    
    function findByAttribute ($arr, $value) {
        $result = array_filter($arr, function($elem) use($value){
         return $elem['attributes']['attribute_art-der-karte'] == $value;
        });
        
        if ($result) {
           return array_shift($result)['variation_id'];
        }
        return '';
    }
    
    var_dump(findByAttribute($array, 'Rot')); // gives '222'
    var_dump(findByAttribute($array, 'a')); // returns ''
    var_dump(findByAttribute($array, 'Green')); // gives 221