我正在尝试通过以下一种条件获取数组的底值:
获取所有数字值,直到下一个值是字符串,然后停止指令,并保留所有其他值,即使它们是数字
<? php $data= [1,2,3,'web',4,5,6,'web',7,8,9]; ?>
输出将是:7,8,9
答案 0 :(得分:0)
您可以使用array_reverse从具有相反顺序元素的数组中获取值。
$reversed = array_reverse($data);
然后解析数组以停止在获取字符串的地方
foreach($reversed as $value) {
if(is_string($value)) {
break;
}
$output[] = $value;
}
//print_r($output); // to print the output array. This will return the values like 9, 8, 7
// do a reverse again to get the values in the format you want.
$final= array_reverse($output);
print_r($final); // to print the final array. This will return the values like 7, 8, 9
这里是DEMO
答案 1 :(得分:0)
尝试一下,如果值是整数,我将值存储在数组$newArray
中。如果在值中找到字符串,只需重置数组$newArray
<?php
$data = [1,2,3,'web',4,5,6,'web',7,8,9];
$newArray = array(); // resultant array
foreach ($data as $key => $value) {
if(is_int($value)){
$newArray[] = $value;
}
else{
$newArray = array(); // reset if not integer
}
}
echo "<pre>";
print_r($newArray);
?>
结果:
Array
(
[0] => 7
[1] => 8
[2] => 9
)
现在,您可以将implode()
用于逗号分隔的结果,例如:
echo implode(",",$newArray); // 7,8,9
编辑:(08-07-2019)
如果是示例
:$data = [1,2,3,'web',4,5,6,'web',7,8,9,'web'];
代码:
<?php
$data = [1,2,3,'web',4,5,6,'web',7,8,9,'web'];
$newArray = array(); // resultant array
end($data);
$keyLast = key($data); // fetches the key of the element pointed to by the internal pointer
foreach ($data as $key => $value) {
if(is_int($value) ){
$newArray[] = $value;
}
else{
if($keyLast === $key) { // if last key is string overwrite the previous array.
$newArray = $newArray;
}
else{
$newArray = array(); // reset if not integer
}
}
}
echo "<pre>";
print_r($newArray);
?>
编辑:
最好将所有整数值存储到数组中,然后使用array_slice()
从新的整数数组中获取三个元素,例如:
<?php
$data = [1,2,3,'web',4,5,6,'web',7,8,9,'web','web','web'];
$newArray = array(); // resultant array
foreach ($data as $key => $value) {
if(is_int($value) ){
$newArray[] = $value;
}
}
$lastThreeElement = array_values(array_slice($newArray, -3, 3, true));
echo "<pre>";
print_r($lastThreeElement);
?>
答案 2 :(得分:0)
我们可以尝试首先过滤以查找第一个非数字条目。然后,从该索引开始,对数组进行子集化。最后,再次过滤子集以删除所有非数字元素。
$data= [1,2,3,'web',4,5,6,'web',7,8,9];
$sub_data = array_filter($data, function($item) { return !is_numeric($item); });
$index = array_search(current($sub_data), $data);
$sub_data = array_slice($data, $index);
$sub_data = array_filter($sub_data, function($item) { return is_numeric($item); });
print_r($sub_data);
此打印:
Array
(
[1] => 4
[2] => 5
[3] => 6
[5] => 7
[6] => 8
[7] => 9
)
答案 3 :(得分:0)
我不知道是否有特定功能,但是我得到了相同的结果
$data= [1,2,3,'web',4,5,6,'web',7,8,9];
foreach ($data as $key => $value) {
if($value=="web"){
$x =$key;
}
}
$data = array_slice($data,$x);
print_r($data);
输出:
Array ( [0] => web [1] => 7 [2] => 8 [3] => 9 )
答案 4 :(得分:0)
您可以只从最后弹出值,直到获得非整数的值。
while (is_int($n = array_pop($data))) {
$result[] = $n;
}
这将修改数据数组,因此,如果您需要保留原始值,请复制一份。
答案 5 :(得分:0)
您要进行的测试取决于示例数据是否具有代表性,并且数组中所需的所有数值均为int
类型,或者某些数值字符串。
$data= [1,2,3,'web',4,5,6,'web',7,8,9];
$result = [];
for($i = count($data)-1; $i >= 0; $i++) {
// If some of the values you want might be numeric strings
// (e.g. "7") or decimals (e.g. 1.5), use this
if(!is_numeric($data[$i])) {
break;
}
// If your values will only be integer type, use this
if(!is_int($data[$i])) {
break;
}
array_unshift($result,$data[$i]);
}
// If you want the results in original order
print_r($result); // Output: [7,8,9]
// If you want the results inverted
$result = array_reverse($result);
print_r($result); // Output: [9,8,7]