用键搜索php数组
假设一个数组如下所示:用键搜索php数组,php,arrays,search,Php,Arrays,Search,假设一个数组如下所示: Array ( [a] => Array ( [id] => 3 [x] => binginb ) [b] => Array ( [id] => 5 [x] => dibdab ) ) 现在我想根据数组的内容访问它,所以在本例中是id和x 能在这里做这样的事
Array
(
[a] => Array
(
[id] => 3
[x] => binginb
)
[b] => Array
(
[id] => 5
[x] => dibdab
)
)
现在我想根据数组的内容访问它,所以在本例中是id
和x
能在这里做这样的事情真是太好了
$i = array_search(5,array_column($a,'id'));
$stuff = dostuff($a[$i]['x']);
但这不起作用,因为$a[1]
是一个未定义的偏移量
是否可以在不改变原始数组的情况下执行类似操作?array\u search()
返回array\u column()结果的索引。您可以使用查找此索引的键:
$a = [
'a' => ['id' => 3, 'x' => 'binginb'],
'b' => ['id' => 5, 'x' => 'dibdab'],
];
$i = array_search(5, array_column($a,'id'));
$key = array_keys($a)[$i]; // get the key at the $i index.
$stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'
请注意,如果未找到该值,则可能返回FALSE
。您可以在使用它之前测试结果(使用严格的比较)
$i = array_search(5, array_column($a,'id'));
if ($i !== false) {
$key = array_keys($a)[$i]; // get the key at the $i index.
$stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'
}
array\u search()
返回array\u column()
结果的索引。您可以使用查找此索引的键:
$a = [
'a' => ['id' => 3, 'x' => 'binginb'],
'b' => ['id' => 5, 'x' => 'dibdab'],
];
$i = array_search(5, array_column($a,'id'));
$key = array_keys($a)[$i]; // get the key at the $i index.
$stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'
请注意,如果未找到该值,则可能返回FALSE
。您可以在使用它之前测试结果(使用严格的比较)
$i = array_search(5, array_column($a,'id'));
if ($i !== false) {
$key = array_keys($a)[$i]; // get the key at the $i index.
$stuff = dostuff($a[$key]['x']); // Here, $a[$key]['x'] = 'dibdab'
}
如果您不希望受到PHP内置函数的限制,请尝试以下方法:
<?php
function dostuff( $var1 )
{
print_r($var1);
}
$a = [
'a' => ['id' => 3, 'x' => 'binginb'],
'b' => ['id' => 5, 'x' => 'dibdab'],
];
array_map( // 2: pass each element from the result from array_filter to dostuff()
'dostuff',
array_filter( // 1: filter $a based on the criteria defined in the anonymous function
$a,
function($item){
return $item['id'] === 5;
}
)
);
如果您不希望受到PHP内置函数的限制,请尝试以下方法:
<?php
function dostuff( $var1 )
{
print_r($var1);
}
$a = [
'a' => ['id' => 3, 'x' => 'binginb'],
'b' => ['id' => 5, 'x' => 'dibdab'],
];
array_map( // 2: pass each element from the result from array_filter to dostuff()
'dostuff',
array_filter( // 1: filter $a based on the criteria defined in the anonymous function
$a,
function($item){
return $item['id'] === 5;
}
)
);
我想这会对你有帮助
<?php
$array = array(
'a' => array(
'id' => 3,
'x' => 'binginb',
),
'b' => array(
'id' => 5,
'x' => 'dibdab',
)
);
$i = array_column($array,'x','id');
我想这会对你有帮助
<?php
$array = array(
'a' => array(
'id' => 3,
'x' => 'binginb',
),
'b' => array(
'id' => 5,
'x' => 'dibdab',
)
);
$i = array_column($array,'x','id');
使用array\u列
按id
重新索引数组:
$new = array_column($a, 'x', 'id');
然后要搜索5
,只需:
echo $new[5];
如果您拥有的不仅仅是x
:
$new = array_column($a, null, 'id');
然后:
如果只执行一次:
echo array_column($a, 'x', 'id')[5];
或:
使用array\u列
按id
重新索引数组:
$new = array_column($a, 'x', 'id');
然后要搜索5
,只需:
echo $new[5];
如果您拥有的不仅仅是x
:
$new = array_column($a, null, 'id');
然后:
如果只执行一次:
echo array_column($a, 'x', 'id')[5];
或:
这对于id
可能有意义,但是当有多个结果时,您期望得到什么?对于id
可能有意义,但是当有多个结果时,您期望得到什么?并且稍微扩展一下这项技术,如果您想获得某个东西的所有匹配,('id'==5)
,你可以做$k=array\u key…
而不是array\u search
然后打印($a[array\u key($a)[$k[1]]]['x'])
将是“'x”,用于匹配$a中的“ID=5”的第二个元素,为了稍微扩展该技术,如果您想获得某个元素的所有匹配,('ID'==5)
,您可以执行$k=array\u key…
而不是array\u search
,然后打印($a[array\u key($a)[$k[1]]][x'])代码>将为“'x”,表示与$a中的“ID=5”匹配的第二个元素