假设我有一个数组
array
array
key1 = 'hello im a text'
key2 = true;
key3 = '><><';
array
array
key1 = 'hello another text'
key2 = 'im a text too'
key3 = false;
array
key1 = ')(&#'
array
key1 = 'and so on'
如何从上面的数组中得到类似下面的内容?
阵列 1 =&gt; “你好,我是一个文本”; 2 =&gt; “你好,另一个文字; 3 =&gt; '我也是一个文字'; 4 =&gt; '等等';
继承人我做了什么
$found = array();
function search_text($item, $key)
{
global $found;
if (strlen($item) > 5)
{
$found[] = $item;
}
}
array_walk_recursive($array, 'search_text');
var_dump($found);
但不知怎的,它不起作用
答案 0 :(得分:2)
尝试类似的内容:
function array_simplify($array, $newarray=array()) { //default of $newarray to be empty, so now it is not a required parameter
foreach ($array as $i) {
if (is_array($i)) { //if it is an array, we need to handle differently
$newarray = array_simplify($i, $newarray); // recursively calls the same function, since the function only appends to $newarray, doesn't reset it
continue; // goes to the next value in the loop, we know it isn't a string
}
if (is_string($i) && strlen($i)>5) { // so we want it in the one dimensional array
$newarray[] = $i; //append the value to $newarray
}
}
return $newarray; // passes the new array back - thus also updating $newarray after the recursive call
}
我的说明:我没有测试过,如果有错误,请告诉我,我会尝试修复它们。
答案 1 :(得分:0)
这样的事情应该有效,
作为我使用的条件
if(is_string($son))
为了获得一些结果,您可以根据需要进行调整
$input = <your input array>;
$output = array();
foreach($input AS $object)
{
search_text($object,$output);
}
var_dump($output);
function search_text($object, &$output)
{
foreach($object AS $son)
{
if(is_object($son))
{
search_text($son, $output);
}
else
{
if(is_string($son))
{
$output[] = $son;
}
}
}
}
说明
search_text
获得2个参数:$object
和结果数组$output
。
如果它是一个对象,它会检查foreach对象的属性。
如果是,则需要自己检查该对象,
否则search_text
检查输入是否为字符串,如果输入存储在$output
数组中