我正在检查特定值是否作为数组中的键存在,我需要执行以下操作 - 如果它存在以收集一些数据。这是一种情况:
$valueCode; //(it can be EV000005, EV000010, etc.)
$temp = array_key_exists_custom($valueCode,$v); //does valueCode exist in array $v
//If it exist I need to collect it is value deeper from structure
//For example, for EV000005 -> I want to get 'Thread holding'
if ($temp) {
$colValue; // after perfroming code, $colValue should have value 'Thread holding'
}
如果我的结构只有EV000005,我会这样做并获得价值。
$colValue = $v[0][$valueCode][0][0][1];
但这对我来说不是解决方案,因为有时我的价值不在$v[0]
,即f.e。当我们搜索EV000010
时,它会在$v[1][$valueCode][0][0][1];
中。我不知道获得这个价值的最佳方法是什么。
数组示例:
Array
(
[0] => Array
(
[EV000005] => Array
(
[0] => Array
(
[0] => Array
(
[0] => EN
[1] => Thread holding
)
[1] => Array
(
[0] => nl-NL
[1] => Schroefdraadhouder
)
)
)
)
[1] => Array
(
[EV000010] => Array
(
[0] => Array
(
[0] => Array
(
[0] => EN
[1] => Desoldering iron
)
[1] => Array
(
[0] => nl-NL
[1] => Desoldeerbout
)
)
在数组中搜索的功能
function array_key_exists_custom($needle, $haystack){
$result = array_key_exists($needle, $haystack);
if ($result) {
return $result;
}
foreach ($haystack as $v) {
if (is_array($v)) {
$result = array_key_exists_custom($needle, $v);
}
if ($result) {
return $result;
}
}
return $result;
}
答案 0 :(得分:1)
将array_key_exists_custom更改为返回值,以这种方式找到关键点:
$result = array_key_exists($needle, $haystack);
if ($result) { return $haystack[$needle]; }
通过
获得结果$res = array_key_exists_custom($key, $arr)[0][0][1];
答案 1 :(得分:0)
使用函数is_array()
使数组的每个元素更“深入”
答案 2 :(得分:0)
我对这个问题的描述有点挣扎 - 我推断你想要在命名键下面找到数据(例如EV000005),但你不知道这个键在顶级数组中的位置
这看起来像XY problem。之所以出现这种困难是因为您感兴趣的键不是顶级数组的键。如果您的初始数据结构是....
Array (
[EV000005] => Array
(
[0] => Array
(
[0] => Array
(
[0] => EN
[1] => Thread holding
)
[1] => Array
(
[0] => nl-NL
[1] => Schroefdraadhouder
)
)
)
[EV000010] => Array
(
[0] => Array
(
[0] => Array
(
[0] => EN
[1] => Desoldering iron
)
[1] => Array
(
[0] => nl-NL
[1] => Desoldeerbout
)
)
...那么我们就不会进行这种对话了。你只需要使用
$colValue = $v['EV000005'][0][0][1];
根据您提供的(确实稀少的)信息,没有理由使用第一级单元素数组,这会让您的生活变得更加困难。
查看更深层次的数据,这种反模式重复,您的数据应更正确:
Array (
[EV000005] => Array
(
[EN] => Thread holding
[nl-NL] => Schroefdraadhouder
)
[EV000010] => Array
(
[EN] => Desoldering iron
[nl-NL] => Desoldeerbout
)
您的代码的另一个问题是您正在使用PHP执行数据过滤操作。数据不是源自PHP - 它应该存储在数据库中。您应该在数据库中进行过滤和排序,而不是在PHP中。
现在假设,有一个非常非常良好的理由,您无法正确解决问题,唯一解决方案是应用您的方法....
function retrieve_description($item, $lang, &$arr)
{
foreach ($arr as $record) {
if (is_array($record[$item])) {
foreach ($record[$item] as $description) {
if ($description[0]==$lang) return $description[1];
}
return false;
}
}
return false;
}
停止为已有标识符的内容分配随机数。