我有一个像:
这样的数组Array
(
[0] => Array
(
[questionid] => 21790
[name] => "________ would anyone hurt my poor cat?"
[userid] => 2
[firstname] => Admin
[category] => 69080
)
[1] => Array
(
[questionid] => 21770
[name] => Choose a suitable meaning of ‘bright’
[userid] => 2
[firstname] => Admin
[category] => 69053
)
[2] => Array
(
[questionid] => 21769
[name] => Choose the correct English word for: سمجھنا
[userid] => 2
[firstname] => Admin
[category] => 69053
)
...
...
...
...
...
)
我想在此数组中搜索两个值questionid
和userid
,这些值位于以下数组中:
$questionids = array(23434, 33232, 33321);
$userids = array(2, 6, 33, 67, 88, 22, 43);
简而言之,我希望主数组中的每个元素都有两个值(questionid和userid)位于数组$questionids
和$userids
中。
我尝试了很多解决方案,但还没有找到任何最佳解决方案。任何帮助将不胜感激。
来自评论
我试过了:
function search( $array, $key, $value ) {
$results = array();
if ( is_array( $array ) ) {
if ( isset( $array[ $key ] ) && $array[ $key ] == $value ) {
$results[] = $array;
}
foreach ( $array as $subarray ) {
$results = array_merge( $results, search( $subarray, $key, $value ) );
}
}
return $results;
}
但上述解决方案的问题在于它需要单个键值对,并且我有多个键值对要查找(在不同的数组中)。
答案 0 :(得分:4)
只需查看函数array_filter
,它应该是您的最佳选择。 http://php.net/manual/en/function.array-filter.php:
$result = array_filter($array, "test_match", ARRAY_FILTER_USE_BOTH);
function test_match($key, $value){
$questionids = array(23434, 33232, 33321);
$userids = array(2, 6, 33, 67, 88, 22, 43);
return
in_array($value["userid"], $userids) && //user match?
in_array($value["questionid"], $questionids); //question match?
}
$result
现在只包含符合条件的元素。
请注意,我已阅读您的说明
简而言之,我希望主数组中的每个元素都有两个值(questionid和userid)位于数组$ questionids和$ userids中。
作为and
条件。如果要么匹配,要么匹配,简单返回
return
in_array($value["userid"], $userids) || //user match?
in_array($value["questionid"], $questionids); //question match?
如果要将参数$userids
和$questionids
作为参数传递,可以将它们包装在执行回调的对象中:
请参阅此处的文档:https://secure.php.net/manual/en/language.types.callable.php每个回调都支持数组(实例/方法名称),或者仅支持第一个示例中的方法名称。
class DataClosure{
private $qids;
private $uids;
function __construct($qids, $uids){
$this->uids = $uids;
$this->qids = $qids;
}
function test_match($key, $value){
return
in_array($value["userid"], $this->uids) && //user match?
in_array($value["questionid"], $this->qids); //question match?
}
}
代码
$questionids = array(23434, 33232, 33321);
$userids = array(2, 6, 33, 67, 88, 22, 43);
$result = array_filter(
$array,
array(
new DataClosure($questionids, $userids),
"test_match"
),
ARRAY_FILTER_USE_BOTH);
答案 1 :(得分:-2)
$question = [];
$userid = [];
foreach($arr as $item){
array_push($question, $item->questionid);
array_push($userid , $item->userid);
}
var_dump($question );
var_dump($userid);
更新:导航到您的阵列并获取您想要的值! 简单如abc!