2013-02-25 4 views
0

Мой первоначальный массивPHP создать новый массив из результатов поиска другого массива

$employees = array(
array('name' => 'jack', 
     'area' => 'crafts'), 

array('name' => 'janet', 
     'area' => 'aquatics'), 

array('name' => 'brad', 
     'area' => 'crafts') 
); 

Я пытаюсь создать новый массив на основе результатов поиска другого массива, так что новый массив должен выглядеть следующим образом, если Я ищу «ремесла»:

$employees2 = array(
array('name' => 'jack', 
     'area' => 'crafts'), 

array('name' => 'brad', 
     'area' => 'crafts') 
); 

Какое простейшее решение я могу получить, чтобы получить этот новый результат.

+0

Что критерии для принятия решения, что происходит в новом массиве? –

+0

http://stackoverflow.com/questions/8440073/filter-array-by-key –

+0

или как насчет http://www.php.net/manual/en/language.types.array.php? –

ответ

0
foreach($employees as $key => $value){ 

    if($value['area']=='crafts'){ 
     $employees2[] = $value; 
    } 

} 

Это довольно просто проходит через первый массив и проверяет значение «площадь» во внутреннем массиве. Если значение равно «crafts», вы можете поместить его в новый массив, который называется $ employees2. Вы можете сменить ремесла на все, что захотите, и добавить все, что хотите между [] в employee2, если вы хотите настроить ключ.

+0

Я пробовал этот метод, и я получаю сообщение об ошибке «employees2 undefined.« – user2108555

+0

Ха! Я получил это для работы. Обычно это помогает, если я перемещаю ссылку включения выше этого кода, иначе скрипт не знает, где найти данные. Как глупо со мной. Большое спасибо за вашу помощь. мой ужасный день. – user2108555

+0

@ user2108555 Если бы вы нашли ответ правильным, не могли бы вы пометить его как правильный ответ. Спасибо. – James

0

Попробуйте это:

$employees = array(
array('name' => 'jack', 
    'area' => 'crafts'), 

array('name' => 'janet', 
    'area' => 'aquatics'), 

array('name' => 'brad', 
    'area' => 'crafts') 
); 

$employees2 = array(); 

foreach ($employees as $key) { 
if($key['name'] == "jack") 
{ 
    array_push($employees2,array('name'=>$key['name'],'area'=>$key['area'])); 
} 
} 

var_dump($employees2); 

array_push делать все трюк;)

Saludos.

+0

Я пробовал этот метод, и я получаю сообщение об ошибке «employee2 undefined variable». – user2108555

+0

Я запустил код и не дал мне ошибки .... его var_dump массив отлично, а $ employees2 определен в этой строке $ employees2 = array(); – Hackerman

0

Вы могли бы упростить синтаксис (но не алгоритмический сложности) с помощью утилиты ремня библиотеки Underscore.php (http://brianhaveri.github.com/Underscore.php/)

Там в числе array- «выщипывание» методы, которые спасают вас от необходимости писать петли, но под капотом он многое делает, как описано в ответах выше.

0

Я буду предполагать, что возможный набор результатов может быть большим. В этом случае вы захотите обработать массив с минимальной дополнительной памятью. Для этого я предлагаю выполнить итерацию через массив по ссылке и сбросить элементы, которые не соответствуют вашим критериям. Возможно, меньше накладных расходов, чем создание нового массива для хранения элементов, соответствующих вашему фильтру. Затем вы можете проверить, пуст ли массив или не определить, возвращает ли фильтр какие-либо результаты. Как так:

<?php 
// maybe this will be set through an option from the UI 
$area_filter = 'crafts'; 

// fetched results 
$employees = array(
    array('name' => 'jack', 
      'area' => 'crafts'), 

    array('name' => 'janet', 
      'area' => 'aquatics'), 

    array('name' => 'brad', 
      'area' => 'crafts') 
); 

// filter out the items that match your filter 
foreach($employees as $i => &$employee){ 
    if($employee['area'] != $area_filter){ 
     unset($employees[$i]); 
    } 
} 

// do something with the results 
if(!empty($employees)){ 
    print_r($employees); 
} else { 
    echo "Sorry, your filter '$area_filter' did not match any results\n"; 
} 
?> 
0

Попробуйте это:

$employees = array(
array('name' => 'jack', 
    'area' => 'crafts'), 
array('name' => 'janet', 
    'area' => 'aquatics'), 
array('name' => 'brad', 
    'area' => 'crafts') 
); 

$employees  = array_filter($employees, function($employee) { 
    return ($employee['area'] == 'crafts'); 
}); 
echo "<pre>"; 
print_r($employees); 
Смежные вопросы