我一直在研究这个问题,但我当前没有PHP的当前功能。
我有一个多维数组,如:
Array
(
[3] => Array
(
[16] => 0
[17] => 1
[18] => 2
)
[4] => Array
(
[22] => 3
[23] => 4
)
[5] => Array
(
[1] => 5
)
)
如果数组的第一个键是静态的,那么很容易修复,但是 所有的键都是动态数据。 (3,4,5等......)我喜欢有一个找到值的键的函数。
myFunction($myArray, 3) // 3 = my value.
如果有值" 3",我希望函数给我关键字。 (4,22)。就像顶部的数组一样。
提前致谢。
答案 0 :(得分:1)
看到你特别想要的东西后:
$array_data = [
3 => [
16 => 0,
17 => 3,
18 => 2],
4 => [
22 => 3,
23 => 4],
5 => [
1 => 5]
];
function findKeysFromValue($search, $array){
foreach($array as $key => $value){
$b = [];
foreach($value as $k => $v){
if($v != $search){
unset($array[$key][$k]);
} else {
$b[] = $k;
}
}
$array[$key] = $b;
}
return array_filter($array,'count');
}
print_r(findKeysFromValue(3, $array_data));
输出如下:
Array(
[3] => Array(
[0] => 17
)
[4] => Array(
[0] => 22
)
)
答案 1 :(得分:1)
如果您确定输入数组始终只是2D,那么这是解决方案。
$test = [
3 => [
16 => 0,
17 => 1,
18 => 2],
4 => [
22 => 3,
23 => 4],
5 => [
1 => 5]
];
function myFunction($array, $value){
foreach($array as $k => $a){
if(in_array($value, $a)){
return ([$k,array_keys($a,$value)]);
}
}
}
var_dump(myFunction($test, 3));
这将输出:
array(2) { [0]=> int(4) [1]=> array(1) { [0]=> int(22) } }
请注意返回数组中的第二个值本身就是一个arrray,因为数组中可能存在多个3个。
我希望它有所帮助
答案 2 :(得分:0)
假设您想要一个包含数组索引的键数组,其中包含搜索值(3),以及该数组中3值的索引,这应该有效:
$matched = [];
foreach($object as $extIndex => $array){
foreach($array as $intIndex => $value){
if($value == 3){
$matched[] = [$extIndex, $intIndex];
}
}
}
var_dump($matched);
编辑:$ object是问题中描述的对象。
答案 3 :(得分:0)
也许这会奏效(虽然我还没试过)。
function findInArray($array, $search, $parentPath) {
foreach ($array as $key => $value) {
$currentPath = array_merge($parentPath, $key);
if (!is_array($value) && $value === $search) {
return $currentPath;
} else if (is_array($value)) {
$res = findInArray($value, $search, $currentPath);
if ($res !== null) {
return $res;
}
}
}
return null;
}
请致电findInArray($array, 3, [])
答案 4 :(得分:0)
此功能适用于2维数组:
function findKey( $arr, $arrValue ) {
foreach ( $arr as $key => $value ) {
foreach ( $value as $subKey => $subValue ) {
if ( $arrValue == $subValue ) {
return $subKey;
}
}
}
return - 1;
}
$mdArray = array(
12 => array(
3 => 4,
4 => 8,
7 => 9
),
23 => array(
5 => 5,
8 => 12,
11 => 18
),
);
echo findKey( $mdArray, 4 ); //3
echo findKey( $mdArray, 5 ); //5
echo findKey( $mdArray, 8 ); //4
echo findKey( $mdArray, 12 ); //8
答案 5 :(得分:0)
如何搜索第一个键的函数然后将属于第一个数组的键作为数组返回,以便您可以遍历这样的值:
<?php
function FindTheKeys($myArray, $myKey)
{
foreach ($myArray as $firstkeys => $firstvalues)
{
if ($firstkeys == $myKey)
{
return array_keys($firstvalues);
}
}
}
$myarr = Array
(
3 => Array
(
16 => 0,
17 => 1,
18 => 2
),
4 => Array
(
22 => 3,
23 => 4
),
5 => Array
(
1 => 5
)
);
$foundkeys = FindTheKeys($myarr, 3);
print_r($foundkeys);
?>
以上将在数组$ foundkeys中返回16,17,18。
答案 6 :(得分:0)
搜索任何数组深度并返回第一个值匹配的递归函数怎么样。
如何: 搜索数组以查找值。
完成工作的功能:
/**
* This will recurse until it finds the value.
* stop on first match
*
* @param array $haystack - where to look
* @param mixed $needle - what to look for
* @param array $keyPath - reference to result array that will store the path
*
* @return boolean $found
*/
function findKeys(array $haystack, $needle, &$keyPath)
{
$found = false;
foreach ($haystack as $key => $value) {
if (is_array($value)) { // record current key and recurse
array_push($keyPath, $key);
$found = findKeys($value, $needle, $keyPath);
if ($found) {
return $found;
}
array_pop($keyPath);
} else {
$found = $value === $needle;
if ($found) {
array_push($keyPath, $key);
break;
}
}
}
return $found;
}
运行它:
$path = array();
$found = findKeys($src, 42, $path);
示例输出:
string(6) "Found:"
bool(true)
Path
Array
(
[0] => 4
[1] => 24
[2] => 126
)
答案 7 :(得分:-1)
使用此功能可以避免一次循环。
$matched = [];
foreach($object as $extIndex => $array){
//Look for value 3 in the array until no value is found
while (false !== $key = array_search(3, $array)) {
$matched[] = [$extIndex, $key];
//Remove the value already found
unset($array[$key]);
}
}
print_r($matched);