Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Search - Fatal编程技术网

用键搜索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”匹配的第二个元素