检查每个数组多维数组

时间:2016-08-26 03:45:27

标签: php arrays loops multidimensional-array foreach

我有多维数组

     <?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

  •   
     

--------------------爱好----------------

     
      
  • 绘制

  •   
  • 游泳

  •   
  •   
     

--------------------技能----------------

     
      
  • 编码

  •   
  • 禁食学习

  •   
  •   
     

但我不知道如何循环多维数组

3 个答案:

答案 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']) : '';
    }
}

Output

当然,如果你愿意,你可以使用<table>标签,这只是一个丑陋的例子。

如果你喜欢某些不同的东西,你也可以使用array_filter

以下是其中的一个示例(这还包括在hobbiesskills内进行的一些搜索):

$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]))
        )
    );
});

Output

答案 1 :(得分:0)

使用php foreach(),如:

foreach (array_expression as $value)
{
    statement
}

Foreach Documentation

答案 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;
}