我正在尝试在多维数组中找到字符串的一部分。
foreach ($invitees as $invitee) {
if (in_array($invitee, $result)){
echo 'YES';
} else {
echo 'NO';
}
}
$invitees
数组有2个元素:
和$result
是我使用db_select()
从Drupal数据库获得的内容
我要做的是,如果$invitees
中某封电子邮件中的第一部分位于$result
,则应回显“是”。 (“@”charather之前的部分)
例如:
“test.email”位于$result
,所以=>是
“user.one”不在$result
中,因此=> NO
我该怎么做?如何在多维数组中搜索字符串的一部分?
旁注:我注意到我从Drupal($result
)得到的数组有2个“对象”,其中包含一个“字符串”,而不是像我期望的那样的数组。
例如:
$test = array('red', 'green', array('apple', 'banana'));
$result
和$test
之间的差异:
这对我如何搜索我的字符串有什么影响吗?
答案 0 :(得分:1)
因为$ result是一个对象数组,所以您需要使用一个方法来访问该值并进行比较。所以,例如你可以这样做:
//1: create new array $results from array of objects in $result
foreach ($result as $r) {
$results[] = get_object_vars($r);
}
//2: expanded, recursive in_array function for use with multidimensional arrays
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
//3: check each element of the $invitees array
foreach ($invitees as $invitee) {
echo in_array_r($invitee, $results) ? "Yes" : "No";
}
此外,对于某些照明,请查看this answer。
答案 1 :(得分:0)
您可以使用preg_grep搜索数组,并在其之前和之后使用通配符。如果它返回一个或多个值,请使用key获取第一个的索引。然后检查它是否大于或等于0,这意味着它找到了一个匹配:)
<?php
$array = array('test1@gdfgfdg.com', 'test2@dgdgfdg.com', 'test3@dfgfdgdfg');
$invitee = 'test2';
$result = key(preg_grep('/^.*'.$invitee.'.*/', $array));
if ($result >= 0) {
echo 'YES';
} else {
echo 'NO';
}
?>
答案 2 :(得分:0)
接受了larsAnders的回答,因为他指出了我的递归函数方向。 这是我最终使用的(基于他的回答):
function Array_search($array, $string) {
foreach ($array as $key => $value) {
if (is_array($value)) {
Array_search($array[$key], $string);
} else {
if ($value->data == $string) {
return TRUE;
}
}
}
return FALSE;
}