我有一个数组如下
array(2) {
["operator"] => array(2) {
["qty"] => int(2)
["id"] => int(251)
}
["accessory209"] => array(2) {
["qty"] => int(1)
["id"] => int(209)
}
["accessory211"] => array(2) {
["qty"] => int(1)
["id"] => int(211)
}
}
我正在尝试找到一种方法来验证数组中存在的id值并返回bool。我试图找出一种不需要创建循环的快速方法。使用in_array函数不起作用,我也读到它很慢。
在php手册中,有人建议使用flip_array()然后使用isset(),但我不能让它适用于2-d数组。
做类似
的事情if($array['accessory']['id'] == 211)
也适用于我,但我需要匹配包含附件的所有键 - 不知道如何做到
无论如何,我在旋转,并可以使用一些帮助。 这看起来应该很容易。感谢。
答案 0 :(得分:6)
嘿dardub,您可以使用array_walk来验证特定值是否在您的数组中 - array_walk遍历您数组的al元素并将提供的函数应用于它们,因此基本上您需要创建该函数。它使用如下:
$arr = array(
'one' => array('id' => 1),
'two' => array('id' => 2),
'three' => array('id' => 3)
);
function checkValue($value, $key)
{
echo $value['id'];
}
array_walk($arr, 'checkValue');
您只需要在函数中添加您需要的条件/验证。
希望它有所帮助。
微米。
编辑: array_walk http://www.php.net/manual/en/function.array-walk.php
上的PHP文档答案 1 :(得分:1)
此函数很有用in_array(211, $array['accessory']);
它验证整个指定数组,以查看您的值是否存在并返回true。
答案 2 :(得分:0)
$map = array();
foreach ($arr as $v) {
$map[$v['id']] = 1;
}
//then you can just do this as when needed
$exists = isset($map[211]);
或者如果您需要与之相关的数据
$map = array();
foreach ($arr as $k => $v) {
$map[$v['id']][$k] = $v;
}
print_r($map[211]);
答案 3 :(得分:0)
<?php
//PHP 5.3 way to do it
function searchNestedArray(array $array, $search, $mode = 'value') {
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $key => $value) {
if ($search === ${${"mode"}})
return true;
}
return false;
}
$data = array(
array('abc', 'ddd'),
'ccc',
'bbb',
array('aaa', array('yyy', 'mp' => 555))
);
var_dump(searchNestedArray($data, 555));
答案 4 :(得分:0)
我使用静态方法,因为我在课堂上需要它,但如果你想要,你可以将它用作一个简单的函数。
/**
* Given an array like this
* array(
* 'id' => "first",
* 'title' => "First Toolbar",
* 'class' => "col-md-12",
* 'items' => array(
* array(
* 'tipo' => "clientLink",
* 'id' => "clientLinkInsert"
* )
* )
* )
*
* and array search like this
* array("items", 0, "id")
*
* Find the path described by the array search, in the original array
*
* @param array $array source array
* @param array $search the path to the item es. ["items", 0, "tipo"]
* @param null|mixed $defaultIfNotFound the default value if the value is not found
*
* @return mixed
*/
public static function getNestedKey($array, $search, $defaultIfNotFound = null)
{
if( count($search) == 0 ) return $defaultIfNotFound;
else{
$firstElementSearch = self::array_kshift($search);
if (array_key_exists($firstElementSearch, $array)) {
if( count($search) == 0 )
return $array[$firstElementSearch];
else
return self::getNestedKey($array[$firstElementSearch], $search, $defaultIfNotFound);
}else{
return $defaultIfNotFound;
}
}
}
答案 5 :(得分:0)
您可以使用
Arr::getNestedElement($array, $keys, $default = null)
从this库中使用诸如'key1.key2.key3'
或['key1', 'key2', 'key3']
之类指定的键从多维数组中获取值,如果未找到任何元素,则回退到默认值。使用您的示例,它看起来像:
if (Arr::getNestedElement($array, 'accessory.id') == 211)