我有多维数组
<?php
$data = array(
array(
'name'=>'ahmed',
'job'=>'engineer',
'age'=>25,
'hobbies' => array('drawing','swimming','reading'),
'skills' => array('coding','fasting learning','teaching')
),
array(
'name'=>'Sara',
'job'=>'designer',
'age'=>19,
'skills'=>array('fast learning')
) ,
array(
'name'=>'Ali',
'age'=>25,
'city'=>'cairo'
),
array(
'name'=>'Hossam',
'job'=>'accountant',
'age'=>25,
'city'=>'zagazig'
),
array(
'name'=>'Esraa',
'job'=>'Designer',
'age'=>23,
'city'=>'zagazig',
'hobbies' => array('writing','reading'),
'skills' => array('coding','teaching')
),
);
我想要计数数组,其中city =&#34; zagazig&#34;或&#34; cairo&#34;
和echo数组值
示例:
- 有[1]人= City =&gt; [cairo]:
----------------结果-----------------------
名称=&gt;阿里
年龄=&gt; 25
City =&gt;开罗
如果城市!exist
回显值
示例:
* ---------------- Invaild Data -------------
-----------------------首先---------------
名称=&gt;萨拉
作业=&gt;设计师
年龄=&gt; 19
技能=&gt;快速学习
-----------------第二----------------
名称=&gt;艾哈迈德
作业=&gt;工程师
年龄=&gt; 25
--------------------爱好----------------
绘制
游泳
读
--------------------技能----------------
编码
禁食学习
教
但我不知道如何循环多维数组
答案 0 :(得分:1)
鉴于这只是一个原始数组,使用if
的简单foreach
就足够了。
首先,如果标准是使用city
获取某些条目,只需使用stripos
进行搜索;
$search_string = 'zagazig';
$results = array();
foreach($data as $value) {
if(
!empty($value['city']) &&
(stripos($value['city'], $search_string) !== false)
) {
$results[] = $value;
}
}
这将检查条目是否具有城市索引,然后将该数组推送到容器$result
中。收集结果后,只需像任何普通数组一样循环:
if(!empty($results)) {
echo 'Number of results: ' , count($results), '<br/> Result <hr/>';
foreach($results as $r) {
echo "
Name: {$r['name']}
Job: {$r['job']}
Age: {$r['age']} <br/>
";
echo !empty($r['hobbies']) ? '<br/>Hobbies: <br/>' . implode('<br/>', $r['hobbies']) : '';
}
}
当然,如果你愿意,你可以使用<table>
标签,这只是一个丑陋的例子。
如果你喜欢某些不同的东西,你也可以使用array_filter
:
以下是其中的一个示例(这还包括在hobbies
和skills
内进行的一些搜索):
$search_string = 'coding';
$criteria = 'skills';
$results = array_filter($data, function($e) use ($search_string, $criteria) {
return (
!empty($e[$criteria]) &&
(!is_array($e[$criteria])
? (strpos($e[$criteria], $search_string) !== false)
: (in_array($search_string, $e[$criteria]))
)
);
});
答案 1 :(得分:0)
答案 2 :(得分:0)
in_array()
不适用于多维数组。您可以编写一个递归函数来为您执行此操作:
$data = array(
array(
'name'=>'ahmed',
'job'=>'engineer',
'age'=>25,
'hobbies' => array('drawing','swimming','reading'),
'skills' => array('coding','fasting learning','teaching')
),
array(
'name'=>'Sara',
'job'=>'designer',
'age'=>19,
'skills'=>array('fast learning')
) ,
array(
'name'=>'Ali',
'age'=>25,
'city'=>'cairo'
),
array(
'name'=>'Hossam',
'job'=>'accountant',
'age'=>25,
'city'=>'zagazig'
),
array(
'name'=>'Esraa',
'job'=>'Designer',
'age'=>23,
'city'=>'zagazig',
'hobbies' => array('writing','reading'),
'skills' => array('coding','teaching')
),
);
if(in_array_r("cairo", $data)) {
print_r(in_array_r("cairo", $data));
} else {
echo 'Not Found!';
}
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 $item;
}
}
return false;
}