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